携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第25天,点击查看活动详情
前言
上篇我们学习了MySQL中的触发器。有兴趣的小伙伴可以阅读(# MySQL学习-触发器(一))。
下面我们继续学习MySQL中的触发器。
触发器
查看触发器
查看触发器是查看数据库中已经存在的触发器的定义、状态和语法信息等。
方式一:查看当前数据库的所有触发器的定义
SHOW TRIGGERS
方式二:查看当前数据库中某个触发器的定义
SHOW CREATE TRIGGER 触发器名
方式三:从系统库information_schema的TRIGGERS表中查询触发器的信息。
SELECT * FROM information_schema.TRIGGERS;
删除触发器
触发器也是数据库对象,删除触发器也用DROP语句,语法如下:
DROP TRIGGER IF EXISTS 触发器名称;
触发器的优点
- 可以保证数据的完整性。 如果有两张关联表,每当录入、删除和修改一条数据的时候,一张表里的数据就会发生变动,而另一张表中的数据会重新计算修改,否则两张表的数据就会出现不一致。
为了解决数据不一致的问题,可以使用触发器。规定在数据录入、删除和修改时,自动触发两个操作:
- 重新计算表的字段结果。
- 用结果更新另外一张表。
这样的话,两张表的数据就一致了,不会互相矛盾。
-
触发器可以帮助我们记录操作日志。
利用触发器,可以具体记录什么时间发生了什么。 -
触发器还可以用在操作数据前,对数据进行合法性检查。
比如,超市进货的时候,需要库管录入进货价格。但是,人为操作很容易犯错误,比如录入金额的时候,看错了录入了错误的数据。这个是可以通过触发器,在实际插入或者更新操作之前,对相应的数据进行检查,及时提示错误,防止错误数据进入系统。
触发器的缺点
- 可读性差
因为触发器存储在数据库中,并且由时间驱动,这就意味着触发器有可能不受应用层的控制,增加了维护系统的难度。 - 相关数据变更时,可能会导致触发器出错。
特别是数据表结构的变更,都可能导致触发器出错,进而影响数据操作的正常运行。这些都会由于触发器本身的隐蔽性,影响到应用中错误原因排查的效率。
注意点
如果子表中定义了外键约束,并且外键指定了ON UPDATE/DELETE CASCADE/SET NULL子句,此时修改父表被引用的键值或删除父表被引用的记录行时,也会引起子表的修改和删除操作,此时基于子表的UPDATE和DELETE语句定义的触发器并不会被激活。
今天先学习到这里,明天继续。