2014-01-21 3 views
0


У меня есть MySQL (5.1.67) таблица 'трекер' с поля TIMESTAMP 'close_time.
В той же таблице у меня есть поле строки 'status'.
Я хочу обновить close_time поля со значением CURRENT_TIMESTAMP когда статус поля обновляется до определенного значения текста, например «Закрыты.MySQL ON триггер UPDATE - обновить ту же таблицу с CURRENT_TIMESTAMP и состояние

Вот пример с вкладышем: How can I write a trigger that updates rows in the same table, before the insert is commited?

Я пытался что-то вроде этого:

CREATE TRIGGER `close_time_trigger` BEFORE UPDATE ON `tracker` FOR EACH ROW 
     BEGIN 
    IF NEW.status = 'Closed' THEN 
    SET NEW.close_time = CURRENT_TIMESTAMP;  
    END IF; 
    END 

Но я получил сообщение об ошибке: У вас ошибка в вашем SQL синтаксиса ... в строке 4.

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

ответ

0

Вы установили DELIMITER?

Это должно работать:

DELIMITER $$ 

CREATE TRIGGER `close_time_trigger` BEFORE UPDATE ON `tracker` FOR EACH ROW 
     BEGIN 
    IF NEW.status = 'Closed' THEN 
    SET NEW.close_time = CURRENT_TIMESTAMP;  
    END IF; 
    END $$ 

DELIMITER ;  
-1

Вы не сказали ему, что обновить.

CREATE TRIGGER `close_time_trigger` BEFORE UPDATE ON `tracker` FOR EACH ROW 
     BEGIN 
    IF NEW.status = 'Closed' THEN 
     update tracker 
     SET NEW.close_time = CURRENT_TIMESTAMP; 
    END IF; 
    END 
+0

Что вы имеете в виду? Я хочу создать триггер для события UPDATE. Вот пример с «до обновления» и «новый»: http://dev.mysql.com/doc/refman/5.0/en/trigger-syntax.html – Vladimir

+0

мой плохой, я пропустил это. до обновления, но после этого тоже. Я думаю, что ваш оператор обновления ошибочен. я отредактирую свой ответ – Alexo912

+0

Я тоже пробовал этот путь, но ту же синтаксическую ошибку SQL, в строке 5 ... – Vladimir

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