欢迎来到徐庆高(Tea)的个人博客网站
磨难很爱我,一度将我连根拔起。从惊慌失措到心力交瘁,我孤身一人,但并不孤独无依。依赖那些依赖我的人,信任那些信任我的人,帮助那些给予我帮助的人。如果我愿意,可以分裂成无数面镜子,让他们看见我,就像看见自己。察言观色和模仿学习是我的领域。像每个深受创伤的人那样,最终,我学会了随遇而安。
当前位置: 日志文章 > 详细内容

MySQL的触发器全解析(创建、查看触发器)

2025年08月09日 Mysql
触发器的概念:mysql触发器(‌trigger‌)是一种与数据库表关联的特殊存储程序,当指定事件(如insert、update、delete)发生时由数据库‌自动触发执

触发器的概念:

mysql触发器(‌trigger‌)是一种与数据库表关联的特殊存储程序,当指定事件(如insert、update、delete)发生时由数据库‌自动触发执行‌。它用于在数据变更前后执行自定义逻辑,确保数据的一致性和业务规则。

触发器是由事件来触发某个操作,这些事件包括insert、update、delete事件。所谓事件就是指用户的动作或者出发某项行为。如果定义了触发程序,当数据库执行这些语句的时候,就相当于事件发生了,就会自动激发触发器执行相应的操作。

创建触发器:

create trigger 触发器名称
{before | after}{insert | update | delete} on 表名
for each row
触发器执行的语句块;

表名:表示触发器监控的对象。

before | after:表示触发的时间。before表示在事件之前触发,after表示在事件之后触发。

insert | update | delete:表示触发的事件。insert插入记录时触发,update更新记录时触发,delete删除记录时触发。

触发器执行的语句块:可以是单条sql语句,也可以是begin...end结构组成的复合语句块。

如果使用了begin...end:

delimiter $
create trigger 触发器名
{before | after} {insert | delete | update} on 表名
for each row
begin
执行的sql语句
end $
delimiter ;

查看触发器:

查看数据库中已经存在的触发器的定义、状态和语法信息等。

查看当前数据库的所有触发器的定义:

show triggers;

查看当前数据中某个触发器的定义:

show create trigger 触发器名;

从系统information_schema的triggers表中查询"salary_check_trigger"触发器的信息:

select * from information_schema.triggers;

删除触发器:

drop trigger [if exists] 触发器名;

优点:

触发器可以确保数据的完整性。可以帮助记录操作日志。还可以用在操作数据前,对数据进行合法性检查。

缺点:

触发器最大的一个问题就是可读性差。因为触发器存储在数据库中,并且由事件驱动,这就意味这触发器有可能不受应用层的控制。

相关数据的变更,可能会导致触发器出错。

注意:

如果在子表中定义了外键约束,并且外键制定了on update/delete cascade/set null子句,此时修改父表被引用的键值或者删除附表被引用的记录行时,也会引起子表的修改和删除操作,此时基于子表的update和delete语句定义的触发器并不会被激活。

总结:

mysql触发器是一种与表关联的特殊存储程序,在指定事件(insert/update/delete)发生时自动执行。通过create trigger语法创建,可设置在操作前(before)或后(after)触发,支持单条sql或复合语句块。触发器能确保数据一致性、记录操作日志和数据校验,但存在可读性差、不易维护的缺点。可通过show triggers查看触发器,使用drop trigger删除。需注意外键约束可能影响触发器的激活。

到此这篇关于mysql的触发器的文章就介绍到这了,更多相关mysql触发器内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!