MySQL触发器
一、什么是触发器
触发器(trigger)是MySQL提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发,比如当对一个表进行操作(insert,delete, update)时就会激活它执行。简单理解为:你执行一条sql语句,这条sql语句的执行会自动去触发执行其他的sql语句。
二、触发器的作用
- 可在写入数据表前,强制检验或转换数据。
- 触发器发生错误时,异动的结果会被撤销。
- 部分数据库管理系统可以针对数据定义语言(DDL)使用触发器,称为DDL触发器。
- 可依照特定的情况,替换异动的指令 (INSTEAD OF)。
三、触发器创建的四要素
- 监视地点(table)
- 监视事件(insert、update、delete)
- 触发时间(after、before)
- 触发事件(insert、update、delete)
四、触发器的使用语法
语法:
before/after:触发器是在增删改之前执行,还是之后执行
delete/insert/update:触发器由哪些行为触发(增、删、改)
on 表名:触发器监视哪张表的(增、删、改)操作
触发SQL代码块:执行触发器包含的SQL语句
1CREATE TRIGGER 触发器名
2BEFORE|AFTER DELETE|INSERT|UPDATE
3ON 表名 FOR EACH ROW
4BEGIN
5触发SQL代码块;
6END;
注意:触发器也是存储过程程序的一种,而触发器内部的执行SQL语句是可以多行操作的,所以在MySQL的存储过程程序中,要定义结束符。
如果MySQL存储过程不了解的小伙伴,可以参考此文 面向MySQL存储过程编程 ,文章中详细讲解了MySQL存储过程的优势和语法等等,相信你会在其中得以收获。
1# 设置MySQL执行结束标志,默认为;
2delimiter //
五、触发器的基本使用
5.1 基本使用步骤
首先,我先展示一下创建的两张表,因为创建的表很简单,这里我没有提供库表操作的SQL命令。
tb_class
employee
其次,创建了一个含有update操作的存储过程
1delimiter //
2create procedure update_emp(in i int, in p int)
3begin
4 update employee set phone = p where id = i;
5end //
再创建一个触发器
分析:触发器名称为t1,触发时间为after,监视动作为update,监视表为employee表。汇总一起解释这个触发器就是:创建一个触发器名称为t1的