触发器
概述
1、MySQL 从 5.0.2 版本开始支持触发器
2、MySQL 触发器和存储过程一样,都是嵌入到 MySQL 服务器的一段程序
3、触发器是由事件来触发某个操作,事件包括 INSERT 、 UPDATE 、 DELETE 事件
4、当对数据表中的数据执行插入、更新和删除操作,需要自动执行一些数据库逻辑时,可以使用触发器来实现
创建触发器
CREATE TRIGGER 触发器名称
{BEFORE|AFTER} {INSERT|UPDATE|DELETE} ON 表名
FOR EACH ROW
触发器执行的语句块;
1、表名:表示触发器监控的对象
2、BEFORE | AFTER:表示触发的时间
(1)BEFORE:表示在事件之前触发
(2)AFTER:表示在事件之后触发
3、INSERT | UPDATE | DELETE:表示触发的事件
(1)INSERT:表示插入记录时触发
(2)UPDATE:表示更新记录时触发
(3)DELETE:表示删除记录时触发
4、触发器执行的语句块
(1)可以是单条 SQL 语句
(2)可以是由 BEGIN…END 结构组成的复合语句块
查看触发器
1、查看数据库中已经存在的触发器的定义、状态、语法信息等
2、方式一:查看当前数据库的所有触发器的定义
SHOW TRIGGERS \G
3、方式二:查看当前数据库中某个触发器的定义
SHOW CREATE TRIGGER 触发器名;
4、方式三:从系统库 information_schema 的 TRIGGERS 表中查询触发器的信息
SELECT * FROM information_schema.TRIGGERS;
删除触发器
1、触发器是数据库对象,使用 DROP 语句
DROP TRIGGER IF EXISTS 触发器名称;
优点
1、确保数据的完整性
2、帮助记录操作日志
3、在操作数据前使用,对数据进行合法性检查
缺点
1、触发器最大的一个问题就是可读性差
(1)触发器存储在数据库中,并且由事件驱动
(2)触发器有可能不受应用层的控制,对系统难以维护
2、相关数据的变更,可能会导致触发器出错
(1)由于触发器本身的隐蔽性,影响排查应用中错误的效率
事项
1、如果在子表中定义外键约束,且外键指定 ON UPDATE / DELETE CASCADE / SET NULL 子句
2、修改父表被引用的键值,或删除父表被引用的记录行时,引起子表的修改和删除操作
3、此时基于子表的 UPDATE 和 DELETE 语句定义的触发器并不会被激活
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战