1. 为什么要使用触发器
- 我们可能会遇到如下场景.我们有两个相互关联的表,如商品信息表与库存信息表.当我们向商品信息表添加一条记录时,为了保证数据完整性,也必须向库存信息表添加一条数据.
- 我们就必须把这两个关联的操作写在程序里,用事务包裹去来,确保这两个操作是原子操作.要么一直执行,要么一起不执行.
- 这个时候我们可以考虑使用触发器.创建一个触发器,当商品信息表插入数据时自动触发库存数据表的插入操作.
2. 触发器
(1). 语法格式
CREATE TRIGGER trigger_name
{BEFORE | AFTER} {INSERT | UPDATE | DELETE} ON table_name
FOR EACH ROW
BEGIN
SQL代码块
END;
- BEFORE/AFTER表示触发时间,是在事件前触发,还是执行事件后触发.
- INSERT/UPDATE/DELETE表示触发的事件.如INSERT插入事件时触发.
- FOR EACH ROW表示对受事件影响的每一行都要执行触发器.
(2). 例
3. 查看,删除触发器
(1). 查看触发器
(1). 方式1
# 查看当前数据库的所有触发器
SHOW TRIGGERS;
(2). 方式2
# 查看数据库的某个触发器的定义
SHOW CREATE TRIGGER after_insert;
# after_insert是我定义的一个触发器
(3). 方式3
# 从系统表查看所有的触发器
SELECT * FROM information_schema.TRIGGERS;
(2). 删除触发器
DROP TRIGGER 触发器名
4. 触发器的优缺点
(1). 优点
- 触发器可以保证数据的完整性.
- 触发器可以帮助我们记录操作日志.
- 触发器还可以在操作数据前,对数据进行合法性检查.
(2). 缺点
- 最大的问题就是可读性差.因为触发器存储在数据库中,由事件驱动.意味着触发器可能不受应用层控制.对数据库维护有很大挑战.
- 相关数据的变更,可能会导致触发器出错.进行影响数据操作的正常运行.这些都会由于触发器操作的隐蔽性,使得影响到应用错误原因的排查效率.