sql >> データベース >  >> RDS >> Mysql

mysqlcreateトリガー構文エラー

    SIGNALを介してエラーを発生させようとした場合 SQLSTATEを指定する必要があります これはエラーコードであり、ユーザー定義の一般的なエラーコードの場合は45000 メッセージテキストMESSAGE_TEXTと一緒に

    したがって、トリガーは次のようになります

    delimiter //
    create trigger lock_x_id before update on games
    for each row
    begin
     if old.xid is not null then
       signal SQLSTATE VALUE '45000' SET MESSAGE_TEXT = 'Your custom error message';
     end if;
    end;//
    delimiter ;
    

    テストケース

    mysql> select * from games;
    +----+------+------+
    | id | xid  | val  |
    +----+------+------+
    |  1 | NULL |    1 |
    |  2 | NULL |    2 |
    |  3 | NULL |    3 |
    |  4 |    1 |    4 |
    |  5 |    2 |    5 |
    +----+------+------+
    

    今すぐトリガーを作成しましょう

    mysql> delimiter //
    mysql> create trigger lock_x_id before update on games
        -> for each row
        -> begin
        ->  if old.xid is not null then
        ->    signal SQLSTATE VALUE '45000' SET MESSAGE_TEXT = 'Your custom error message';
        ->  end if;
        -> end;//
    Query OK, 0 rows affected (0.05 sec)
    
    
    mysql> update games set xid = 4 where id = 1;
    Query OK, 1 row affected (0.06 sec)
    Rows matched: 1  Changed: 1  Warnings: 0
    
    mysql> update games set xid = 5 where id=5;
    ERROR 1644 (45000): Your custom error message
    

    そして、ここで上記の2つの更新コマンドを実行した後、テーブルはどのように表示されますか

    mysql> select * from games;
    +----+------+------+
    | id | xid  | val  |
    +----+------+------+
    |  1 |    4 |    1 |
    |  2 | NULL |    2 |
    |  3 | NULL |    3 |
    |  4 |    1 |    4 |
    |  5 |    2 |    5 |
    +----+------+------+
    

    2回目の更新が失敗し、行が変更されていないことに注意してください。

    この https://dev.mysql.com/doc /refman/5.5/en/signal.html




    1. SQLクエリからテーブルを作成する方法

    2. MYSQLwhere句の条件付き

    3. 適切なドライバーがありません。 Hibernateを使用してHeroku上のpostgresqlデータベースに接続しようとしています

    4. データベースが内部にパッケージ化された実行可能Javaアプリケーション(JAR)