我想在主表中进行更新和删除时为事件表创建一个触发器。我有两个表一个是主要的,另一个是事件表。如果主表中的任何更改(更新和删除)插入到事件表中的旧记录。
fld_id fld_name fld_date fld_logid
1 vino 12/4/2014 4
2 arun 12/4/2014 4
fld_id p_table_id fld_name fld_date fld_logid
1 1 vino 12/4/2014 4
2 1 vino 12/4/2014 4
3 1 vino 12/4/2014 4
4 1 vino 12/4/2014 4
5 2 arun 12/4/2014 4
6 2 arun 12/4/2014 4
答案 0 :(得分:0)
如果主表中的任何更改(如更新和删除)插入到事件表中的旧记录。
您可以在after delete
上定义primary_table
触发器,以记录delete
次操作
并在after update
上定义primary_table
触发器以记录update
次操作。
我不确定您的确切要求,但如果要记录这些操作,那么在operation_type
中有datetime
和event_table
字段会很好记录事件类型和发生时间。
如果表中未定义此类字段,您可以按如下所示添加:
alter table event_table
add column event_type enum( 'delete', 'update' ) not null default 2
, add column event_time datetime default current_timestamp
假设有这样的字段,我建议关注trigger
s
如果不需要此字段,您可以注释掉该字段。
示例1: 删除后 :
drop trigger if exists ad_on_primary_table;
delimiter //
create trigger ad_on_primary_table
after delete
on primary_table
for each row
begin
insert
into event_table ( p_table_id, fld_name, fld_date, fld_logid
, event_type, event_time
)
values ( OLD.fld_id, OLD.fld_name, OLD.fld_date, OLD.fld_logid
, 'delete', current_timestamp -- 'delete' is @ index 1 in enum
-- or use the following
-- , 1, current_timestamp -- 1 is index of 'delete' in enum
);
end;
//
示例2: 更新后 :
drop trigger if exists au_on_primary_table;
delimiter //
create trigger au_on_primary_table
after update
on primary_table
for each row
begin
insert
into event_table ( p_table_id, fld_name, fld_date, fld_logid
, event_type, event_time
)
values ( OLD.fld_id, OLD.fld_name, OLD.fld_date, OLD.fld_logid
, 'update', current_timestamp -- 'update' is @ index 2 in enum
-- or use the following
-- , 2, current_timestamp -- 2 is index of 'update' in enum
);
end;
//