目录
1 触发器的定义
2 创建和执行触发器
2.1 触发器中的 new和 old
2.2 创建触发器
2.3 执行触发器
3 删除触发器
4 查看触发器
5 触发器的优点与缺点
1 触发器的定义触发器(trigger)是和表关联的特殊的存储过程,当数据库系统执行insert、update和delete事件时,会激活使其执行相应的操作。
2 创建和执行触发器 2.1 触发器中的 new和 old在MySQL中用old
和new
表示触发器执行前和执行后的数据。
new在before触发器中赋值、取值,在after触发器中取值。在after的触发器中,new的赋值已经结束了,只能读取内容。
深入了解:https://www.cnblogs.com/joyco773/p/5787088.html
-- 单个执行语句的触发器
CREATE trigger 触发器名 before/after 触发事件
ON 表名 FOR EACH ROW 执行语句
-- 多个执行语句的触发器
CREATE trigger 触发器名 before/after 触发事件
ON 表名 FOR EACH ROW
BEGIN
执行语句
END
MySQL是按照BEFORE触发器、行操作、AFTER触发器的顺序执行的
2.3 执行触发器
例如:test表插入时将新数据trig列设为insert_trigger
create trigger insert_trigger before insert
on test for each row
set new.trigger='insert_trigger';
navicat触发器
插入数据
结果
3 删除触发器
DROP trigger [IF EXISTS] [schema_name.]trigger_name
schema_name是数据库的名称,trigger_name是要删除的触发器的名称。
4 查看触发器
在MySQL中,所有的触发器的定义都存在于INFORMATION_SCHEMA数据库的triggers表中,可以通过查询命令SELECT来查看,具体语法如下:
SHOW trigger [FROM schema_name];
5 触发器的优点与缺点
优点:
安全性
可以基于数据库的值使用户具有操作数据库的某种权利。可以基于时间限制用户的操作,例如不允许下班后和节假日修改数据库数据;可以基于数据库中的数据限制用户的操作,例如不允许股票的价格的升幅一次超过10%。
审计
可以跟踪用户对数据库的操作。 审计用户操作数据库的语句;把用户对数据库的更新写入审计表。
实现复杂的数据完整性规则
实现非标准的数据完整性检查和约束。触发器可产生比规则更为复杂的限制。与规则不同,触发器可以引用列或数据库对象。例如,触发器可回退任何企图吃进超过自己保证金的期货。提供可变的缺省值。
实现复杂的非标准的数据库相关完整性规则。
触发器可以对数据库中相关的表进行连环更新。
在修改或删除时级联修改或删除其它表中的与之匹配的行。
在修改或删除时把其它表中的与之匹配的行设成NULL值。
在修改或删除时把其它表中的与之匹配的行级联设成缺省值。
触发器能够拒绝或回退那些破坏相关完整性的变化,取消试图进行数据更新的事务。
同步实时地复制表中的数据。
SQL触发器提供了运行计划任务的另一种方法。自动计算数据值,如果数据的值达到了一定的要求,则进行特定的处理。例如,如果公司的帐号上的资金低于5万元则立即给财务人员发送警告数据。
缺点:
增加程序的复杂度,有些业务逻辑在代码中处理,有些业务逻辑用触发器处理,会使后期维护变得困难;
参考:
https://blog.51cto.com/9291927/2095105 (触发器应用)
https://www.cnblogs.com/joyco773/p/5787088.html (对数据库触发器new和old的理解)
作者:曹杜安