触发器是与表有关的数据库对象,在满足定义条件时触发,并执行触发器中定义的语句集合。
有begin end体,begin end;之间的语句可以写的简单或者复杂
- 什么条件会触发:INSERT,DELETE、UPDATE
- 什么时候触发:在增删改前或者后
- 触发频率:针对每一行执行
- 触发器定义在表上,附着在表上
- 每个表最多支持6个触发器
- 单一触发器不能与多个事件或多个表相关联
- 如果before触发器失败,则mysql将不执行请求操作,如果before触发器或语句本身失败,,MySQL将不执行after触发器(如果有的话)
- 触发器不能更新或覆盖,为了修改一个触发器,必须先删除,再重新创建
- 触发器内不支持call语句,不能从触发器内调用存储过程
触发器是针对每一行的;对增删改非常频繁的表上切记不要使用触发器,因为它会非常消耗资源。
创建触发器语句
mysql> create trigger trigger_name [after|before] [delete|insert|update] on table_name -> for each row -> begin -> ... -> end;
INSERT触发器
- 在insert触发器代码内,可以引用一个名为new的虚拟表,访问被插入的行
- 在before insert触发器中,new中的值可以被更新
- 对于auto_increment列,new在insert执行钱包含0,在insert执行后包含新的自动成值
DELETE触发器
- 在delete触发器代码内,可以引用一个名为old的虚拟表,访问被删除的行
- old中的值全部只读不能被更新
UPDATE触发器
- 在update触发器代码中,可以引用一个名为old的虚拟表访问以前(update语句前)的值,引用一个new的虚拟表访问新的更新的值
- 在before update触发器中,new中的值可能是被更新(允许更改将要用于update语句中的值)
- old中的值全部是只读,不能更新