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

问题描述:

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

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工作台显示错误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()。

+0

更新语句本身没有更新last_modified列的任何原因? –

+0

这是一项任务的一部分;它需要我使用触发器。 – Richard

这奏效了:

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

你试图做的是不可能使用触发器。

在存储函数或触发器,它不允许通过调用函数或触发 语句来修改已被使用(读或写)一 表。

Source

你需要这个做一些其他的方式。

在这里看到:MySQL - Trigger for updating same table after insert

做到这一点的典型方式是创建一个存储过程,即 插入到/更新目标表,然后更新其他行(S), 所有交易。