触发器(trigger)是由事件触发某个操作,事件包括INSERT语句、UPDATE语句和DELETE语句。当数据库系统执行这些事件时就会激活触发器执行相应的操作。
为什么使用触发器
再具体开发项目时,会遇见如下实例:
- 新员工入职,添加一条该员工相关的记录,员工的总数就必须同时改变。
- 学生毕业后,学校删除该学生的记录,同时也希望能删除该同学的借书记录。
在上述情况中,当一个表的数据发生改变时,希望能够自动做一些处理操作。这些自动做的一些处理操作就是通过触发器来实现的。
只有delete、insert和 update会激发触发器;触发器能够加强数据库表中数据的完整性约束和业务规则等。
如何使用触发器
触发器是特殊的存储过程,只不过触发器是由一个预定义的事件的发生来激活。
-
一条执行语句的触发器
create trigger trigger_name before | after trigger_event on table_name for each row trigger_stmt # before | after :指定触发器执行的时间 # trigger_event:表示触发时间,包括update、insert和delete语句 # table_name:触发事件的操作表名 # for each row:任何一条记录上的操作满足触发事件都会触发该触发器 # trigger_stmt: 激活触发器后被执行的语句
例:在数据库company中存在两个表:部门表t_dept和日志表t_logger,创建触发器实现向部门表中插入记录时,就会在插入之前向日志表中插入当前时间:
CREATE TRIGGER tri_loggertime BEFORE INSERT ON t_dept FOR EACH ROW INSERT INTO t_logger VALUES (NULL,'t_dept',now());
-
多条执行语句的触发器
delimiter $$ create trigger trigger_name before | after trigger_event on table_name for each row BEGIN trigger_stmt END; $$ delimiter ; # before | after :指定触发器执行的时间 # trigger_event:表示触发时间,包括update、insert和delete语句 # table_name:触发事件的操作表名 # for each row:任何一条记录上的操作满足触发事件都会触发该触发器 # trigger_stmt: 激活触发器后被执行的语句
查看触发器
show triggers\G
select * from information_schema.triggers;
删除触发器
drop trigger trigger_name;
注: 本文参考《Mysql 5.7 从入门到实践》张婷 一书。