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           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/

相关文章:

mysql - MySQL 的事务性 DDL 工作流

java - 如何计算java中两个日期之间的准确月份差异

javascript - php中一张列表中的多个值

php - 从 MySql 上的多对多表中的两个主键获取一行

php - 在后台多次从 android 执行 .php 文件的最佳方法是什么?

MySQL使用AS表达式时设置数据类型

我网站上的 PHP 页面显示为空白

mysql - 加入不重复

PHP/SQL 数学带来疯狂的结果

MySQL构造返回排序的计数列表