- 触发器概述;
- 触发器相关语句;
- 触发器注意事项;
触发器概述
触发器(trigger)是一种特殊的存储过程,不同的是,执行存储过程需要使用CALL语句来调用,而触发器发挥作用则不需要使用,也不需要手工启动。当预定事件发生时,触发器就会被自动调用,但需要重要的是,触发器的事件只包含三种:插入(insert),更新(update),删除(delet)。
触发器可以查询不同的表,而且可以包含复杂的SQL语句。它们主要用于满足复杂的业务规则或要求。本文着重介绍触发器的创建方法。
触发器相关语句
触发器的创建
创建触发器的一般语句如下代码:
DELIMITER //
CREATE TRIGGER trigger_name trigger_time trigger_event ON table_name
FOR EACH ROW
begin
trigger_stmt
end
//
DELIMITER ;
为了区别与常规语句,我们一般选择在触发器定义的开始通过声明(delimiter)的方式改变指令结束符,这样做是为了区别常规语句与触发器内部语句。
其中,trigger_name表示触发器名称;
trigger_time表示触发器触发时间,包含前触发(before)和后触发(after)两种;
trigger_event表示触发操作,即:插入,删除和更新;
trigger_stmt表示触发器事件主体,即SQL语句部分。
OLD表与NEW表
在触发器动作完成后,数据库会自动写入新表,我们称NEW表与OLD表,值得注意的是:
- insert触发器只能够查看NEW表
- delete触发器只能够查看OLD表
- update触发器可查看NEW表和OLD表;其中,NEW表记录的是更新完之后的信息,OLD表记录的是更新前的信息
- OLD表与NEW表中记录的都是当前修改表的信息
- 触发器不返回任何结果到客户端,仅针对表做操作
由于定义触发器过程中是不能够出现SELECT语句的,因此不能使用AS或者REFERRING的方法。这也就是说,使用NEW表和OLD表,我们可以实现在不同于操作表的其他表上做附属操作。
比如:我可以在员工表(员工号,员工名,基本工资,上班日期)上创建触发器,当更新员工表时,顺带计算出员工在工资表(员工号,实际工资)实际工资。
查看触发器
查看触发器有两种方法:
- 使用SHOW TRIGGERS语句
- 在TRIGGER表中查看
SHOW TRIGGERS ;
在MySQL数据库中,所有的触发器定义都存储在系统数据库INFORMATION_SCHEMA的TRIGGERS表格中,可通过查询TRIGGERS表查看触发器
SELECT * FROM INFORMATION_SCHEMA.TRIGGERS
WHERE condition ;
式中的condition为查询条件,如:触发器名称。
删除触发器
DROP trigger [schema.]trigger_name ;
其中,schema_name表示数据库名称,属于可选项,如果没有指明数据库,则默认从当前数据库中删除满足条件的触发器。
触发器注意事项
MySQL触发器使用非常简单,当然其功能也比较有限。当你在项目中大量使用触发器,那么你应该注意以下几点,以避免触发器不按预期效果执行:
- 如果需要变动整个数据集而数据集数据量又较大时,触发器效果会非常低;因为MySQL触发器为行级触发器
- 每一个表的一个事件只能定义一个触发器,例如:不能够定义两个AFTER INSERT触发器,但是可以定义一个BEFORE INSERT和一个AFTER INSERT
- 不能在视图(view)上建立触发器,因为视图本质不是表而是SELECT语句
本期教程至此全部结束啦,创作不易,如果觉得有用请一键三连,感谢您的配合!