纸帆|ZevenFang

我们终其一生寻找的无非是那个甘愿为你停下脚步,为你驻足的人。

0%

MySQL触发器

触发器(trigger)是提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发,比如当对一个表进行操作( insert,delete, update)时就会激活它执行。触发器经常用于加强数据的完整性约束和业务规则等。 触发器可以从 DBA_TRIGGERS ,USER_TRIGGERS 数据字典中查到。

作者:纸帆
链接:https://juejin.cn/post/7082214959580446734/
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

触发器:

  1. 能监视: 增,删,改
  2. 触发操作: 增,删,改

四要素:

  • 监视地点
  • 监视事件
  • 触发时间
  • 触发事件

创建触发器的语法

1
2
3
4
5
6
create trigger triggerName
after/before insert/update/delete on <表名>
for each row -- 这句话是固定的
begin
<sql语句>; -- 一句或多句,insert/update/delete范围内
end;

删除触发器的语法:
1
Drop trigger <触发器名>

查看触发器:
1
Show triggers

如何在触发器引用行的值:

  • 对于insert而言, 新增的行 用new来表示
  • 行中的每一列的值 ,用new.列名来表示
  • 对于 delete来说, 原本有一行,后来被删除
  • 想引用被删除的这一行,用old来表示, old.列名,就可以引用被删行中的值
  • 对于update来说,被修改的行
  • 修改前的数据 ,用old来表示, old.列名引用被修改之前行中的值
  • 修改后的数据,用new 来表示, new.列名引用被修改之后行中的值

触发器里after 和before的区别:

  • After 是先完成数据的增,删,改再触发,
    触发的语句晚于监视的增,删,改,无法影响前面的增删改动作.
  • Before是先完成触发,再增删改,
    触发的语句先于监视的增,删,改发生,我们有机会判断,修改即将发生的操作

典型案例:

  • 对于所下订单,进行判断,如果订单的数量 > 5,就认为是恶意订单,
    强制把所订的商品数量改成5。