在MySql中创建事件表触发器

在MySql中创建事件表触发器,mysql,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

当我们在主表中进行更新和删除时,我想为事件表创建一个触发器。我有两个表,一个是主表,另一个是事件表。如果主表中有任何更改,如更新和删除插入到事件表中的旧记录

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
如果主表中有任何更改,如更新和删除插入到事件表中的旧记录

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
您可以在主_表上定义删除后触发器来记录删除操作。 并在主_表上定义更新后触发器以记录更新操作

我不确定您的确切要求,但如果这是为了记录这些操作,那么最好在event_表中有一个operation_类型和datetime字段来记录事件类型和发生时间

如果表中未定义此类字段,可以按如下所示添加:

alter table event_table 
    add column event_type enum( 'delete', 'update' ) not null default 2
  , add column event_time datetime default current_timestamp
假设有这样一个字段,我建议使用以下触发器。 如果不需要该字段,则可以注释掉该字段

示例1:删除后:

示例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;
//