触发器
- 触发器:在事件发生时自动执行
- 触发器是MySQL响应以下任意语句而自动执行的一条MySQL语句(或一组语句)
DELETEINSERTUPDATE
创建触发器
- 创建触发器时,需要给出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语句- 不能从触发器内调用存储过程,所需的存储过程代码需要复制到触发器内