Mysql
 sql >> Database >  >> RDS >> Mysql

Errore di sintassi su MySQL Trigger

Affinché il tuo client MySQL non interpreti il ​​; che termina il INSERT istruzione come fine del CREATE TRIGGER dichiarazione, devi informarlo che desideri utilizzare qualche altro delimitatore di dichiarazione.

Nel mysql client della riga di comando, puoi farlo con il DELIMITER comando . Ad esempio, per modificare il delimitatore dell'istruzione in un doppio punto e virgola:

DELIMITER ;;

Allora puoi fare:

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;;

Tuttavia, poiché in questo caso il tuo trigger contiene solo un'istruzione, non è necessario utilizzare un BEGIN ... END blocco di istruzioni composte e potrebbe quindi evitare di modificare del tutto i delimitatori:

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'
  )
;