触发器

作者: 每天进步一点点变成更好的自己 | 来源:发表于2022-05-19 12:17 被阅读0次

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操作:


image.png image.png

2、OLD操作

delete操作中:OLD表示删除的数据


image.png image.png

相关文章

网友评论

      本文标题:触发器

      本文链接:https://www.haomeiwen.com/subject/pvdzurtx.html