mysql这就是触发器

什么是触发器 trigger

触发器,顾名思义, 在遇到一定条件时就会触发,触发后执行一个或者一组sql语句的装置 。
比如在学生成绩表中,新增一门课的成绩后, 就修改该学生的绩点。 或者在银行卡消费之后, 就给户主发一条余额通知短信。

触发器的种类

触发器在指定表后, 可以在插入数据(insert),更新数据(update),删除数据(delete)这三个动作的前(before)后(after)触发 。因为触发器的种类有六种,分别是 插入前,插入后, 更新前,更新后, 删除前,删除后。
每个表每种触发器只能创建一次, 故每个表最多可以创建六个触发器。

触发器关键词 old ,new

这两个该关键字,表示触发的那一行在操作前和操作后的数据。
INSERT触发器中, NEW用来表示将要(BEFORE)或已经(AFTER)插入的新数据。
UPDATE触发器中,OLD用来表示将要或已经被修改的原数据,NEW用来表示将要或已经修改为的新数据。
DELETE触发器中,OLD用来表示将要或已经被删除的原数据。
使用方法NEW.columnName(columnName为相应数据表某一列名)
另外,OLD 是只读的,而 NEW 则可以在触发器中使用 SET 赋值,这样不会再次触发触发器,造成循环调用

如何创建触发器

创建触发器的语法为
CREATE TRIGGER trigger_name time event ON table_Name FOR EACH ROW
BEGIN
trigger_sql_list;
END
创建触发器, 在更新学生表之后, 记录该表格更新次数的变量加1。

mysql> SET @cuont_stu_update = 0 $

mysql> CREATE TRIGGER update_count AFTER UPDATE ON student FOR EACH ROW
    ->  BEGIN
    -> SET @cuont_stu_update = @cuont_stu_update +1;
    -> END$
Query OK, 0 rows affected (0.10 sec)

mysql> UPDATE student SET class ='1' WHERE s_num =101$
Query OK, 0 rows affected (0.01 sec)

mysql> SELECT @cuont_stu_update$     #  更新之前是0, 现在为1
+-------------------+
| @cuont_stu_update |
+-------------------+
|                 1 |
+-------------------+
1 row in set (0.00 sec)

查看触发器

在这里插入图片描述

删除触发器

mysql> DROP TRIGGER update_conut;
Query OK, 0 rows affected (0.03 sec)

触发器的优点

  1. 触发器的自动性,与一个操作相关的操作可以用触发器自动完成
  2. 触发器类似一个无参数的存储过程,操作会同时生效或失效,具有一致性。

触发器的缺点

  1. 触发器隐藏的,就在无形中增加了数据库的复杂性
  2. 触发是隐藏的,容易被忽略产生的效果
  3. 触发器隐藏的,数量较多时,给系统维护带来困难

所以触发器功能要注释清晰,不用时及时删除,任务繁杂时使用显示的存储过程,过程更清晰。

猜你喜欢

转载自blog.csdn.net/weixin_43705953/article/details/107611528