Mysql
 sql >> Base de données >  >> RDS >> Mysql

Erreur de syntaxe sur le déclencheur MYSQL

Pour que votre client MySQL n'interprète pas le ; qui termine le INSERT comme fin de CREATE TRIGGER déclaration, vous devez l'informer que vous souhaitez utiliser un autre délimiteur de déclaration.

Dans le mysql client en ligne de commande, vous pouvez le faire avec le DELIMITER commande . Par exemple, pour remplacer votre délimiteur d'instruction par un double point-virgule :

DELIMITER ;;

Ensuite, vous pouvez faire :

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

Cependant, comme dans ce cas votre déclencheur ne contient qu'une seule instruction, vous n'avez pas besoin d'utiliser un BEGIN ... END bloc d'instruction composé et pourrait donc éviter de changer complètement les délimiteurs :

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