MySQL触发器更新

时间:2014-11-20 03:13:30

标签: mysql sql tsql triggers

我想创建一个触发器,将修改后的行的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
$$

2 个答案:

答案 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();

请注意,通常会涉及两个触发器,一个用于插入,另一个用于更新。它们在您的情况下都做同样的事情,因为您似乎只有一个“最后更新”列,但如果需要,您可以使用创建和更新列。