我想创建一个触发器,将修改后的行的last_modified列更新为当前时间。这是我提出的,但是当我尝试在创建触发器后更新一行时,它不会让我。
delimiter $$
create trigger survey_responder_modified
after update on survey_responders
for each row
begin
update survey_responders
set last_modified = now();
end
$$
答案 0 :(得分:1)
您可以尝试此样本触发代码
对于新插入行中data_create列中的添加当前日期
CREATE TRIGGER trigger_DatetimeInsert BEFORE INSERT ON tableName FOR EACH ROW
BEGIN
SET NEW.date_create = NOW();
END;
对于新修改行的data_modify列中的添加当前日期
CREATE TRIGGER trigger_DatetimeModify BEFORE UPDATE ON tableName FOR EACH ROW
BEGIN
SET NEW.date_modify = NOW();
END;
答案 1 :(得分:0)
在我看来,它可能导致无限回归。换句话说,在通过更新表触发的触发器中,您再次更新表,导致触发器被触发,...
现在MySQL 可能足够智能以防止这种情况,但我不打赌它,特别是当有一种更简单的方法时。
这种功能最好在触发器之前作为而不是在触发器之后完成。这样,您可以在数据进入表格之前设置列。
这将是以下几点:
create trigger survey_responder_inserting
before insert on survey_responders
for each row set new.last_modified = now();
create trigger survey_responder_updating
before update on survey_responders
for each row set new.last_modified = now();
请注意,通常会涉及两个触发器,一个用于插入,另一个用于更新。它们在您的情况下都做同样的事情,因为您似乎只有一个“最后更新”列,但如果需要,您可以使用创建和更新列。