1、触发器的概念
触发器:保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程。通过事件触发,当对一个表进行操作(insert、delete、update)时就会激活它执行。
触发器经常用于加强数据的完整性约束和业务规则等。
2、触发器的作用
触发器的优点:
- 1、触发器的执行时自动的,当对触发器相关表的数据作出相应的修改后立即执行
- 2、触发器可以实施比FOREIGH KEY约束、CHECK约束更为复杂的检查和操作
- 3、触发器可以实现表数据的级联更新,在一定程度上保证了数据的完整性
3、创建触发器
语法:
1、触发器名:触发器的某个in从,在当前数据库中必须具有唯一的名称。
2、INSERT | UPDATE | DELETE
:用于指定激活触发器的语句的种类。
INSERT:将新行插入时激活触发器。
UPDATE :更改表中某一行数据时激活触发器。
DELETE:表中删除某一行数据时激活触发器。
3、BEFORE、AFTER
:触发器被触发的时刻,表示触发器是在激活它的语句之前或之后触发。如果验证新数据是否满足条件,则使用BEREORE。
4、FOR EACH ROW
:一般指行级触发,对于受触发时间影响的每一行都要激活触发器的动作。比如当INSERT语句向某个表中插入多行数据时,触发器会对每一行数据的插入都执行相应的触发器动作。
CREATE TRIGGER <触发器名>
< BEFORE | AFTER > ---定义触发时机
<INSERT | UPDATE | DELETE > ---定义DML类型
ON <表名>
FOR EACH Row ---声明为行级触发器(只要操作一条记录就触发触发器执行一次)
<触发器主体SQL语句> ---触发器操作
实例:创建一个名为SumOfSalary的触发器,触发的条件是向数据表tb_emp8中插入数据之前,对新插入的salary字段值进行求和计算。
mysql> CREATE TRIGGER SumOfSalary
-> BEFORE INSERT ON tb_emp8
-> FOR EACH ROW
-> SET @sum=@sum+NEW.salary;
Query OK, 0 rows affected (0.35 sec)
SET @sum=0;
Query OK, 0 rows affected (0.05 sec)
mysql> INSERT INTO tb_emp8
-> VALUES(1,'A',1,1000),(2,'B',1,500);
Query OK, 2 rows affected (0.09 sec)
Records: 2 Duplicates: 0 Warnings: 0
mysql> SELECT @sum;
+------+
| @sum |
+------+
| 1500 |
+------+
1 row in set (0.03 sec)
4、NEW与OLD
触发器用于监听对数据表中的insert、delete、update等DML进行操作,在触发器中,通常处理一些DML的关联操作。
NEW
:在触发器中用NEW获取Insert操作添加的数据、update操作后可以使用NEW获取修改后的记录。
OLD
:在触发器中用OLD获取delete操作删除的数据、update操作可以使用OLD获取修改前的记录。
1、NEW操作
insert操作:
![](https://img.haomeiwen.com/i26045017/5285ff141bbbe2a6.png)
![](https://img.haomeiwen.com/i26045017/b9a8f1f671e63e62.png)
2、OLD操作
delete操作中:OLD表示删除的数据
![](https://img.haomeiwen.com/i26045017/741343ca9090a8a6.png)
![](https://img.haomeiwen.com/i26045017/bb6d8eed4021a71d.png)
网友评论