• mysql-常用组件之触发器


    基本概念

    触发器是一种特殊的存储过程,不像存储过程需要显示调用,触发器通过监控表事件(增删改操作)自动触发某条 sql 的执行,可以用于购物车加购后库存减少等场景。

    触发器基本操作

    1. 创建触发器

    DELIMITER $$
    
    CREATE
        /*[DEFINER = { user | CURRENT_USER }]*/
        TRIGGER `dbname`.`trigger` BEFORE/AFTER INSERT/UPDATE/DELETE
        ON `dbname`.`<Table Name>`
        FOR EACH ROW BEGIN
              -- 触发的 sql 动作
        END$$
    
    DELIMITER ;
    
    • 触发时间:
      before:表中数据发生改变前的状态
      after:表中数据发生改变后的状态
      PS:如果 before 触发器失败或者语句本身失败,将不执行 after 触发器(如果有的话)
    • 触发事件:
      INSERT
      DELETE
      UPDATE
    • old/new 关键字
      触发器针对的是数据库中的每一行记录,每行数据在操作前后都会有一个对应的状态,触发器将没有操作之前的状态保存到 old 关键字中,将操作后的状态保存到 new 中,不同类型的触发事件拥有不同的关键字类型:
    触发事件类型 new/old使用
    INSERT事件 没有 old,只有 new,new 表示将要(插入前)或者已经增加(插入后)的数据
    UPDATE事件 既有 old 也有 new,old 表示更新之前的数据,new 表示更新之后的数据
    DELETE事件 没有 new,只有 old,old 表示将要(删除前)或者已经被删除(删除后)的数据

    2. 查看触发器

    SQL 语句:

    SHOW TRIGGERS;
    

    3. 删除触发器

    触发器不能修改,只能删除,删除 sql 语句:

    DROP TRIGGER triggerName;
    

    触发器的优缺点

    1. 优点

    触发器事件跟触发器中的 SQL 语句是原子性的(要么同时执行,要么同时不执行),这样保证了数据的完整性。

    2. 缺点

    1)只适合用于并发不高的管理系统中用,如果是面向用户的高并发应用,则不能使用,因为大部分的 web 应用瓶颈都在 DB,把耗时的服务做成 Scale Out,这种情况下,肯定不会使用存储过程;而如果只是一般的应用,DB 没有性能上的问题,在适当的场景下,也可以使用存储过程。
    2)存储过程的致命伤在于移植性,存储过程不能跨库移植,比如事先是在mysql数据库的存储过程,考虑性能要移植到oracle上面那么所有的存储过程都需要被重写一遍。
    3)触发器不推荐使用,难以开发和维护,且可以被事务代替,触发操作能在业务层解决就在业务层解决,否则很难维护,而且容易产生死锁。

    天行健,君子以自强不息;地势坤,大地以厚德载物
  • 相关阅读:
    IIS6.0远程命令执行
    非结构化和结构化数据提取
    Data Binding on Android
    微前端 [ 日常笔记 ]
    吴裕雄 python 机器学习-NBYS(2)
    吴裕雄 python 机器学习-NBYS(1)
    吴裕雄 python 爬虫(4)
    吴裕雄 python 爬虫(3)
    吴裕雄 python 爬虫(2)
    吴裕雄 python 爬虫(1)
  • 原文地址:https://www.cnblogs.com/aizen-sousuke/p/11965908.html
Copyright © 2020-2023  润新知