2014-10-21 3 views
0

Я хотел бы определить триггер для установки столбца (deleted_at) в 'NOW()' при изменении строки. Я пытался что-то вроде этого =>Trigger on update

CREATE TRIGGER test AFTER INSERT ON articles 
FOR EACH 
ROW 
BEGIN 
    UPDATE articles SET updated_at = NOW() ; 
END; 

Но у меня есть ошибки, как это =>

# 1064 - Ошибка синтаксиса около '' строка 5

ответ

2

Либо вы удалите BEGIN и END (если у вас есть только один оператор в триггере), или вы помещаете другой разделитель. Также вы не обновляете триггер обновления. Сделайте это триггером BEFORE и установите значение напрямую.

DELIMITER $$ 
CREATE TRIGGER test BEFORE INSERT ON articles 
FOR EACH 
ROW 
BEGIN 
    SET NEW.updated_at = NOW() ; 
END $$ 
DELIMITER ; 
+0

Ok, Thanx, я понимаю, NEW это линия линия вставлена. И если я хочу активировать триггер, когда я обновляю строку? – Gauthier

+0

'NEW' - это значение, которое вы указали в своей инструкции insert или значение, которое оно должно иметь после этого,' OLD' - это значение перед тем, как оператор сделал что-либо. Если вы хотите иметь триггер для оператора обновления, вам нужно написать еще один триггер. – fancyPants

1

Дело в том, что вы обновляете таблицу в самом триггере.

Почему бы вам не использовать триггер перед вставкой?

CREATE TRIGGER test BEFORE INSERT ON articles 
FOR EACH 
ROW 
BEGIN 
    set NEW.updated_at = NOW() ; 
END; 

Таким образом, вы уверены, что ваше поле обновляется в каждой вставке.

0

Вы должны изменить линию

UPDATE articles SET updated_at = NOW() ; 

с этим один

SET NEW.updated_at = NOW() ;