Mysql(一) 触发器

含义

      指定一个触发的条件,Mysql 在执行一个insert、update或者 delete sql 时满足了触发器的条件,将按照触发器指定的条件自动执行指定好的某个sql;

创建一个触发器:

1. 唯一的触发器名;

2. 触发器关联的表;

3. 触发器应该响应的活动(DELETE、INSERT或UPDATE);

4.  触发器何时执行(处理之前或之后)。

举例:

假如我有一个产品表 products, 一个日志记录表 sys_logs,创建一个触发器,使得每插入一个products数据都记录下这个数据的信息:

create TRIGGER after_inserts_add_log AFTER INSERT ON products

FOR EACH ROW  insert  INTO sys_logs(sys_logs.table_name, sys_logs.action, sys_logs.record_id) VALUES (NEW.name, 'insert test', NEW.id);

上面触发器的结构为:

create  trigger 触发器名 AFTER INSERT/BEFORE INSERT/AFTER DELETE/BEFORE DELETE/BEFORE UPDATE/AFTER UPDATE on  表名 for each row  你想让触发器执行的sql (在触发器执行的sql ,可以引用mysql 内部的 NEWOLD虚拟表来获取触发前后被更新的数据的字段)

 

 

 

 

  • 其他

  • 使用触发器记录数据库数据的变动非常容易,是创建数据库审计跟踪的方案。

  • 删除一个触发器:
DROP TRIGGER 触发器名;
  • 可以在一个触发器中指定一系列动作,一系列sql,使用 BEGIN 和 END关键字:也可以解决存储引擎不支持同一个表有多个类型的触发器的问题

    This version of MariaDB doesn't yet support 'multiple triggers with the same action time and event for one table'
    
    同一个表不支持多个相同触发类型的触发器
    create TRIGGER after_inserts_1 AFTER INSERT ON products
    FOR EACH ROW 
    BEGIN
    insert  INTO sys_logs(sys_logs.table_name, sys_logs.action, sys_logs.record_id) VALUES (NEW.name, 'insert test_ACTION1', NEW.id);
    insert  INTO sys_logs(sys_logs.table_name, sys_logs.action, sys_logs.record_id) VALUES (NEW.name, 'insert test_ACTION2', NEW.id);
    END;
    

修改后的引擎,每插入一个products数据,都记录两条sys_logs数据,action分别是  insert test_ACTION1和insert test_ACTION2;

  • 查看触发器
    SHOW TRIGGERS;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值