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

MYSQLトリガーの構文エラー

    MySQLクライアントが;を解釈しないようにするため INSERTを終了します CREATE TRIGGERの終わりとしてのステートメント ステートメントの場合は、他のステートメント区切り文字を使用することを通知する必要があります。

    mysql コマンドラインクライアントの場合、DELIMITERを使用してこれを行うことができます コマンド 。たとえば、ステートメントの区切り文字をダブルセミコロンに変更するには:

    DELIMITER ;;
    

    次に、次のことができます:

    CREATE TRIGGER LOG_UPDATE BEFORE UPDATE ON WORKLOG FOR EACH ROW BEGIN
      INSERT INTO WORKLOG_BACKUP VALUES (
        NULL,
        CURRENT_TIMESTAMP,
        NEW.LOGNO,
        NEW.JOBNO,
        NEW.EMPLOYEENO,
        NEW.WORKDATE,
        NEW.WORKTIME,
        'UPDATE'
      );
    END;;
    

    ただし、この場合、トリガーにはステートメントが1つしか含まれていないため、 BEGIN ... END 複合ステートメントブロック したがって、区切り文字の変更を完全に回避できます。

    CREATE TRIGGER LOG_UPDATE BEFORE UPDATE ON WORKLOG FOR EACH ROW
      INSERT INTO WORKLOG_BACKUP VALUES (
        NULL,
        CURRENT_TIMESTAMP,
        NEW.LOGNO,
        NEW.JOBNO,
        NEW.EMPLOYEENO,
        NEW.WORKDATE,
        NEW.WORKTIME,
        'UPDATE'
      )
    ;
    



    1. OracleDBからMariaDBに移行する方法

    2. 複数のテーブルを含む1対1の関係

    3. Androidsqlitedb.queryはCursorIndexOutOfBoundsExceptionにつながります

    4. SQLツリー構造でノードを検索する