触发器

概述

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 语句定义的触发器并不会被激活

posted @   半条咸鱼  阅读(132)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
点击右上角即可分享
微信分享提示