MySQL:触发器
创建触发器#
所谓触发器,就是在某一个操作发生时,我希望有某些语句会随之自动执行,就可以使用这个功能。触发器将会对 DELETE、INSERT、UPDATE 语句做出响应,执行另一个操作。当创建触发器时,要保证每个数据库中的触发器名是唯一的,虽然不同的表允许拥有同名的触发器,但是这种习惯还是要养成。创建时需要给出以下信息:
- 触发器名;
- 触发器关联的表;
- 触发器响应的语句;
- 触发器执行的时机。
要创建触发器,就使用 CREATE TRIGGER 语句来光剑,如果要删除就使用 DROP TRIGGER 语句。由于每个表每个事件每次只允许一个触发器,因此每个表只能支持 DELETE、INSERT、UPDATE 3 种语句的 BEFORE 和 AFTER 2 种一共 6 个触发器。一般来说 BEFORE 型用于数据验证和净化,保证插入的是所需的数据。
不过 MySQL 5+ 的触发器总体功能较弱,不支持 CALL 语句,即不能够封装入存储过程。同时触发器的创建需要安全权限,不过使用却需要,因为是自动进行的,这也就说明了这个操作是透明的,且与客户机无关。触发器的一个应用就是进行审计跟踪,能够知晓数据的变化。
INSERT 触发器#
INSERT 触发器会在 INSERT 语句执行前或执行后被启动,在触发器的代码内可以引用一个 NEW 虚拟表,访问被插入的行。对于设置为自动增量的列,虚拟表可以在操作之前包含一个 0,然后操作时自动增量也会被自动执行。
在这里,每当 INSERT 语句被执行,就会将一个字符串注入到一个变量中。
所以在没做 INSERT 操作时,这个变量为 NULL。
执行一次任意 INSERT 操作,变量的值被修改。
DELETE 触发器#
DELETE 触发器内可以引用一个 OLD 虚拟表,访问被删除的行,表中的值都是只读的。这个触发器就可以吧 OLD 保存的被删除数据添加到一个新的表中。
UPDATE 触发器#
UPDATE 触发器内可以引用一个 OLD 虚拟表,访问被修改前的行,引用一个 NEW 虚拟表访问被更新的行。在 BEFORE UPDATE 触发器中 NEW 的值可能被更新。
参考资料#
《MySQL Crash Course》[英] Ben Forta 著,刘晓霞 钟鸣 译,人民邮电出版社
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
2020-04-25 Wireshark实验——DNS 域名系统