触发器(trigger)是提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发,比如当对一个表进行操作( insert,delete, update)时就会激活它执行。触发器经常用于加强数据的完整性约束和业务规则等。 触发器可以从 DBA_TRIGGERS ,USER_TRIGGERS 数据字典中查到。
作者:纸帆
链接:https://juejin.cn/post/7082214959580446734/
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
触发器:
- 能监视: 增,删,改
- 触发操作: 增,删,改
四要素:
- 监视地点
- 监视事件
- 触发时间
- 触发事件
创建触发器的语法1
2
3
4
5
6create 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。