使用触发器更新DATETIME,在MySQL中获取错误1442

时间:2013-04-02 03:04:06

标签: mysql triggers mysql-workbench mysql-error-1442

我遇到了MySQL中的触发器问题。我有一个名为“last_modified”的列,我希望在编辑表时自动更新当前日期和时间。使用触发器,这是我的SQL查询:

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',因为它已被调用此存储函数/触发器的语句使用”

我已经查看了类似的问题但是仍然没有修复它。感谢帮助。

**更新**

这就是诀窍:

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()。

2 个答案:

答案 0 :(得分: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()。

答案 1 :(得分:0)

使用触发器无法实现您的目的。

  

在存储的函数或触发器中,不允许修改a   已经被使用(用于读或写)的表   调用函数或触发器的语句。

Source

你需要以其他方式做到这一点。

见这里:MySQL - Trigger for updating same table after insert

  

这样做的典型方法是创建一个存储过程   插入/更新目标表,然后更新其他行,   所有在交易中。