2014-04-12 80 views
0

我想在創建主表中的更新和刪除時創建事件表的觸發器。我有一個兩個表是主要的,另一個是事件表。如果主表中的任何更改(如更新和刪除)插入到事件表中的舊記錄。在MySql中創建事件表觸發器

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

如果像主表中的任何改變(更新和刪除),插入事件表中的舊記錄。

您可以在primary_table定義after delete觸發記錄delete操作。
並定義after update觸發器primary_table來記錄update操作。

我不知道你的確切要求,但如果這是記錄這些操作的話,那將是很好的有一個operation_typedatetime字段中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; 
//