Как я могу сохранить DDL для моего триггера в гармонии с моим кодом триггера?

#mysql #triggers

#mysql #триггеры

Вопрос:

Я пытаюсь создать триггер в Database Workbench (Lite, для MySQL) с помощью этого:

 delimiter // 
CREATE TRIGGER employeesTableInsert AFTER INSERT ON EMPLOYEES FOR EACH ROW 
SET NEW.CREATED = CURRENT_TIMESTAMP; END IF;//
  

Однако, когда я пытаюсь создать новый триггер, я получаю сообщение об ошибке:

введите описание изображения здесь

Это кажется странным; Я смотрю на вкладку DDL в Database Workbench, и там есть это:

введите описание изображения здесь

Почему он удваивает и искажает мой код триггера в DDL (только для чтения)?

Как показано в начале, мой код триггера содержит только то, что показано выше:

введите описание изображения здесь

Так проблема в моем коде, или это потому, что вкладка DDL запутана? Или мой код ПРИВОДИТ к путанице во вкладке DDL или что?

Ответ №1:

Если вы хотите обновить только значение, вам нужно следующее.

вы не можете использовать SET без BEGIN и END, это не запрос.

Мне интересно, почему в вашем коде есть END IF

Редактировать я также изменил ваш ТРИГГЕР на BEFORE INSERT , потому что там вы можете изменить значения НОВОГО столбца (см. Комментарий Билла Карвина)

И на самом деле вам не нужен триггер, см. Руководство

 DELIMITER //
CREATE TRIGGER employeesTableInsert BEFORE INSERT ON EMPLOYEES 
FOR EACH ROW 
BEGIN
    SET NEW.CREATED = CURRENT_TIMESTAMP;
END//
  

Комментарии:

1. Также вы не можете изменить какой-либо столбец (например, NEW.created ) в AFTER триггере.