使用触发器更新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()。
答
这奏效了:
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() 。
答
你试图做的是不可能使用触发器。
在存储函数或触发器,它不允许通过调用函数或触发 语句来修改已被使用(读或写)一 表。
你需要这个做一些其他的方式。
在这里看到:MySQL - Trigger for updating same table after insert
做到这一点的典型方式是创建一个存储过程,即 插入到/更新目标表,然后更新其他行(S), 所有交易。
更新语句本身没有更新last_modified列的任何原因? –
这是一项任务的一部分;它需要我使用触发器。 – Richard