暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

MySQL触发器使用详解

大龄编程小猪 2021-04-21
254

    DELIMITER $$


    CREATE
    /*[DEFINER = { user | CURRENT_USER }]*/
    TRIGGER `db_jw`.`new` BEFORE/AFTER INSERT/UPDATE/DELETE
    ON `db_jw`.`<Table Name>`
    FOR EACH ROW BEGIN


    END$$


    DELIMITER ;
      DELIMITER $$


      CREATE
      /*[DEFINER = { user | CURRENT_USER }]*/
      TRIGGER `数据库名称`.`触发器名称` 执行顺序(BEFORE/AFTER) 执行的操作(INSERT/UPDATE/DELETE
      ON `数据库名称`.`触发操作的表`
      FOR EACH ROW BEGIN
      /*插入新增的数据*/
      INSERT INTO 要执行触发结果的表(字段) VALUES(new.触发操作表的字段);
      /*修改同上*/
      UPDATE 要执行触发结果的表 n
      JOIN 触发操作表 o ON 新表.字段 = 旧表.字段
      SET 新表.字段 = 旧表.字段,新表.字段 = 旧表.字段 ,新表.字段 = 旧表.字段 ;
      /*删除*/
      DELETE FROM 要执行触发结果的表 WHERE 新表字段的id=old.触发操作表的字段的id;
      END$$


      DELIMITER ;


      trigger_event 详解
      MySQL 除了对 INSERT、UPDATE、DELETE 基本操作进行定义外,还定义了 LOAD DATA 和 REPLACE 语句,这两种语句也能引起上述6中类型的触发器的触发。

      LOAD DATA 语句用于将一个文件装入到一个数据表中,相当与一系列的 INSERT 操作。

      REPLACE 语句一般来说和 INSERT 语句很像,只是在表中有 primary key 或 unique 索引时,如果插入的数据和原来 primary key 或 unique 索引一致时,会先删除原来的数据,然后增加一条新数据,也就是说,一条 REPLACE 语句有时候等价于一条。

      INSERT 语句,有时候等价于一条 DELETE 语句加上一条 INSERT 语句。

      INSERT 型触发器:插入某一行时激活触发器,可能通过 INSERT、LOAD DATA、REPLACE 语句触发;
      UPDATE 型触发器:更改某一行时激活触发器,可能通过 UPDATE 语句触发;
      DELETE 型触发器:删除某一行时激活触发器,可能通过 DELETE、REPLACE 语句触发。

      BEGIN … END 详解
      在MySQL中,BEGIN … END 语句的语法为:

      BEGIN
      [statement_list]
      END
      其中,statement_list 代表一个或多个语句的列表,列表内的每条语句都必须用分号(;)来结尾。
      而在MySQL中,分号是语句结束的标识符,遇到分号表示该段语句已经结束,MySQL可以开始执行了。因此,解释器遇到statement_list 中的分号后就开始执行,然后会报出错误,因为没有找到和 BEGIN 匹配的 END。

      这时就会用到 DELIMITER 命令(DELIMITER 是定界符,分隔符的意思),它是一条命令,不需要语句结束标识,语法为:
      DELIMITER new_delemiter
      new_delemiter 可以设为1个或多个长度的符号,默认的是分号(;),我们可以把它修改为其他符号,如$:
      DELIMITER $
      在这之后的语句,以分号结束,解释器不会有什么反应,只有遇到了$,才认为是语句结束。注意,使用完之后,我们还应该记得把它给修改回来。


      文章转载自大龄编程小猪,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

      评论