0

我在使用 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()。

4

2 回答 2

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

于 2013-04-02T13:27:50.727 回答
0

使用触发器无法执行您尝试做的事情。

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

来源

您需要以其他方式执行此操作。

见这里:MySQL - 插入后更新同一个表的触发器

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

于 2013-04-02T03:33:59.670 回答