MySQL触发器

    触发器是与表有关的数据库对象,在满足定义条件时触发,并执行触发器中定义的语句集合。

有begin end体,begin end;之间的语句可以写的简单或者复杂

  1. 什么条件会触发:INSERT,DELETE、UPDATE
  2. 什么时候触发:在增删改前或者后
  3. 触发频率:针对每一行执行
  4. 触发器定义在表上,附着在表上
  5. 每个表最多支持6个触发器
  6. 单一触发器不能与多个事件或多个表相关联
  7. 如果before触发器失败,则mysql将不执行请求操作,如果before触发器或语句本身失败,,MySQL将不执行after触发器(如果有的话)
  8. 触发器不能更新或覆盖,为了修改一个触发器,必须先删除,再重新创建
  9. 触发器内不支持call语句,不能从触发器内调用存储过程

触发器是针对每一行的;对增删改非常频繁的表上切记不要使用触发器,因为它会非常消耗资源。

创建触发器语句

mysql> create trigger trigger_name [after|before] [delete|insert|update] on table_name
    -> for each row
    -> begin
    -> ...
    -> end;

INSERT触发器

  1. 在insert触发器代码内,可以引用一个名为new的虚拟表,访问被插入的行
  2. 在before insert触发器中,new中的值可以被更新
  3. 对于auto_increment列,new在insert执行钱包含0,在insert执行后包含新的自动成值

DELETE触发器

  1. 在delete触发器代码内,可以引用一个名为old的虚拟表,访问被删除的行
  2. old中的值全部只读不能被更新

UPDATE触发器

  1. 在update触发器代码中,可以引用一个名为old的虚拟表访问以前(update语句前)的值,引用一个new的虚拟表访问新的更新的值
  2. 在before update触发器中,new中的值可能是被更新(允许更改将要用于update语句中的值)
  3. old中的值全部是只读,不能更新
原文地址:https://www.cnblogs.com/tianzeng/p/10359532.html