如何更改历史记录表中的字段?使用触发器

时间:2014-06-10 12:47:39

标签: mysql sql triggers

我有很多领域(col)的商务桌, field1,field2,field3 ...

我想跟踪业务表中的更改,并将它们保存在history_table中。

我想我可以用触发器来实现吗?但我的问题是我不知道如何实现触发器,只会将历史表写入已更改的字段。

所以例如:

if (NEW.field1 != OLD.filed1 and NEW.field3 != OLD.field3)

作为

insert INTO history (field1,field3) VALUES (OLD.field1,OLD.field3)

注意我没有插入field2!

1 个答案:

答案 0 :(得分:0)

这是您可以尝试的方式

delimiter //
create trigger history_update after insert on business
for each row
begin
    declare field_1 varchar(200) default NULL ; 
    declare field_2 varchar(200) default NULL ;
    declare field_3 varchar(200) default NULL ;
    declare field_4 varchar(200) default NULL ;
    declare field_5 varchar(200) default NULL ;
    ....
    declare field_30 varchar(200) default NULL ;

    if(NEW.field1 != OLD.filed1) then
        set field_1 = OLD.field1 ;
    end if ;

    if(NEW.field2 != OLD.filed2) then
        set field_2 = OLD.field2 ;
    end if ;
    ...............
    ...............
    if(NEW.field30 != OLD.filed30) then
        set field_30 = OLD.field30 ;
    end if ;

    insert into history 
    (field1,field2,field3.......field30) 
    values
    (field_1,field_2,field_3......field_30);
end ; //

delimiter ;