2013-04-02 5 views
0

У меня возникла проблема с триггером в MySQL. У меня есть столбец с именем «last_modified», который я хочу автоматически обновить с текущей датой и временем, когда редактируется таблица. С помощью триггера, это мой SQL-запрос:Обновление DATETIME с помощью триггера, получение ошибки 1442 в MySQL

delimiter // 
CREATE TRIGGER trg_update_responders BEFORE UPDATE ON survey_responders 
FOR EACH ROW 
BEGIN 
UPDATE survey_responders 
SET NEW.last_modified = CURRENT_DATETIME(); 
END;// 

Однако, когда я обновить таблицу, например, с этим запросом:

UPDATE survey_responders SET first_name = "bob" WHERE id = "1"; 

MySQL Workbench отображает ошибку 1442: «Невозможно обновить таблицу 'table_name' в хранимой функции/триггере, потому что он уже используется оператором, который вызывал эту сохраненную функцию/триггер "

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

** UPDATE **

Это сделал трюк:

delimiter // 
CREATE TRIGGER trg_update_responders BEFORE UPDATE ON survey_responders 
FOR EACH ROW 
BEGIN 
SET NEW.last_modified = CURRENT_TIMESTAMP(); 
END;// 

кажется, что я просто не нужно повторять

UPDATE survey_responders 

и current_datetime() не существует, Мне пришлось использовать CURRENT_TIMESTAMP().

+0

Любая причина не обновлять последний_модифицированный столбец в самой инструкции обновления? –

+0

Это часть задания; он требует, чтобы я использовал триггер. – Richard

ответ

1

Это сделал трюк:

delimiter // 
CREATE TRIGGER trg_update_responders BEFORE UPDATE ON survey_responders 
FOR EACH ROW 
BEGIN 
SET NEW.last_modified = CURRENT_TIMESTAMP(); 
END;// 

Похоже, я просто не нужно повторять

UPDATE survey_responders 

и current_datetime() не существовало, я должен был использовать CURRENT_TIMESTAMP() ,

0

То, что вы пытаетесь сделать, невозможно с помощью триггера.

В сохраненной функции или триггера, не разрешается изменять таблицу, которая уже используется (для чтения или записи) в заявлении, вызвавшей функцию или триггер.

Source

Вы должны сделать это другим способом.

Смотрите здесь: MySQL - Trigger for updating same table after insert

Типичный способ сделать это, чтобы создать хранимую процедуру, которая вставляет в/обновления целевой таблицы, а затем обновляет другую строку (ы), все в транзакции.

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