2014-10-16 3 views
0

Я пытаюсь создать триггер для обновления поля last_modified при обновлении строки.Создание Last Modified SQL Trigger

Это то, что я пробовал:

USE `mydb`; 

DELIMITER $$ 
DROP TRIGGER IF EXISTS mydb.products_AUPD$$ 

USE `mydb`$$ 
CREATE TRIGGER `products_AUPD` AFTER UPDATE ON products 
    FOR EACH ROW BEGIN 
     SET NEW.`last_modified` = NOW(); 
    END; 
$$ 
DELIMITER ; 

Проблема заключается в MySQL Workbench обыкновение позвольте мне сохранить его (я предполагаю, что есть что-то неправильно с ним, но я не могу узнать, что)

ответ

0

Оказывается, версия MySQL Workbench, в которой я использовал (6.0xxx), имела ошибку, которая играла в хаос с триггерами. Я обновился до 6.2xxx.

Это была первая проблема.

Вторая проблема была, что я использовал NEW ключевое слово в качестве AFTER триггера не допускается:

В теле триггера, вы можете обратиться к столбцам в теме таблицы (таблица, связанная с триггером) с использованием псевдонимов OLD и NEW. OLD.col_name ссылается на столбец существующей строки до того, как она будет обновлена ​​или удалена . Имя NEW.col_ ссылается на столбец новой строки до или в существующую строку после ее обновления.

Так что мой новый триггер выглядит следующим образом:

CREATE DEFINER = CURRENT_USER TRIGGER `mydb`.`products_BEFORE_UPDATE` BEFORE UPDATE ON `products` FOR EACH ROW 
BEGIN 
    SET NEW.`last_modified` = NOW(); 
END; 

Уведомления нет USE или DELIMITER заявления? Это связано с тем, что новая версия MySQL Workbench вводит это для вас (включая разделитель конца $$):

Смежные вопросы