触发器
- 触发器:在事件发生时自动执行
- 触发器是MySQL响应以下任意语句而自动执行的一条MySQL语句(或一组语句)
DELETE
INSERT
UPDATE
创建触发器
- 创建触发器时,需要给出4个信息:
- 唯一的触发器名
- 触发器关联的表
- 触发器应该相应的活动(
DELETE|INSERT|UPDATE
) - 触发器何时执行(处理之前或之后)
- 创建:
- 语法:
CREATE TRIGGER
- 一个表最多支持6个触发器(每个事件的发生前后各一个)
只有表支持触发器,视图不支持触发器
- 语法:
触发器失败:如果
BEFORE
触发器失败,则MySQL不执行请求及其之后的操作(AFTER
触发器)
删除触发器
DROP TRIGGER trigger_name
为了修改一个触发器,必须删除后,重新创建
使用触发器
INSERT触发器
- 几点
- 在
INSERT
触发器代码中,可以引用一个名为NEW
的虚拟表,访问被插入的行 - 在
BEFORE INSERT
触发器中,NEW
中的值也可以被更新 - 对于
AUTO_INCREMENT
列,NEW
在INSERT
执行之前包含0,在INSERT执行之后包含新的自动生成值
- 在
DELETE触发器
- 两点:
- 在
DELETE
触发器代码中,可以引用一个名为OLD
的虚拟表,访问被删除的行 OLD
表中的值为只读,不能更新
- 在
UPDATE触发器
- 三点:
- 在
UPDATE
触发器代码中,可以引用一个名为OLD
的虚拟表,访问被更新前的行,可以引用一个名为NEW
的虚拟表,访问被更新后的行 - 在
BEFORE UPDATE
触发器中,NEW
中的值可能也被更新- 允许更改将要被用于
UPDATE
语句的值
- 允许更改将要被用于
OLD
中的值都是只读的,不能更新
- 在
进一步介绍
- 创建触发器可能需要特殊的安全访问权限,但是触发器的执行时自动的
- 应该使用触发器来保证数据的一致性
- 在触发器中执行这种类型的处理优点是它总是进行这种处理,而且是透明的进行
- 触发器的一种有意义的使用是创建审计跟踪
- 利用触发器把更改记录到另一个表
- 遗憾:在MySQL触发器中不支持
CALL
语句- 不能从触发器内调用存储过程,所需的存储过程代码需要复制到触发器内