如果像主表中的任何改變(更新和刪除),插入事件表中的舊記錄。
您可以在primary_table
定義after delete
觸發記錄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
小號有這樣場的假設。
如果此字段不是必需的,您可以註釋該字段。
實施例1:2
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;
//
舉例::後刪除後更新:
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;
//