我想在主表中进行更新和删除时为事件表创建一个触发器。我有两个表,一个是主表,另一个是事件表。如果主表中有任何更改,例如(更新和删除)旧记录插入到事件表中。
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
最佳答案
If any change in primary table like (update and delete) the old record inserted into event table.
您可以在primary_table
上定义after delete
触发器来记录删除
操作。
并在primary_table
上定义一个after update
触发器来记录update
操作。
我不确定您的确切要求,但如果这是为了记录这些操作,那么最好在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
。
如果不需要该字段,您可以注释掉该字段。
示例 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;
//
关于mysql - 在MySql中创建事件表触发器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23026144/