• 触发器概述;
  • 触发器相关语句;
  • 触发器注意事项;

触发器概述

       触发器(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表,值得注意的是:

  1. insert触发器只能够查看NEW表
  2. delete触发器只能够查看OLD表
  3. update触发器可查看NEW表和OLD表;其中,NEW表记录的是更新完之后的信息,OLD表记录的是更新前的信息
  4. OLD表与NEW表中记录的都是当前修改表的信息
  5. 触发器不返回任何结果到客户端,仅针对表做操作

由于定义触发器过程中是不能够出现SELECT语句的,因此不能使用AS或者REFERRING的方法。这也就是说,使用NEW表和OLD表,我们可以实现在不同于操作表的其他表上做附属操作。

比如:我可以在员工表(员工号,员工名,基本工资,上班日期)上创建触发器,当更新员工表时,顺带计算出员工在工资表(员工号,实际工资)实际工资。

查看触发器

查看触发器有两种方法:

  1. 使用SHOW TRIGGERS语句
  2. 在TRIGGER表中查看
SHOW TRIGGERS ;

在MySQL数据库中,所有的触发器定义都存储在系统数据库INFORMATION_SCHEMA的TRIGGERS表格中,可通过查询TRIGGERS表查看触发器

SELECT * FROM INFORMATION_SCHEMA.TRIGGERS
WHERE condition ;

式中的condition为查询条件,如:触发器名称。

删除触发器

DROP trigger [schema.]trigger_name ;

其中,schema_name表示数据库名称,属于可选项,如果没有指明数据库,则默认从当前数据库中删除满足条件的触发器。


触发器注意事项

MySQL触发器使用非常简单,当然其功能也比较有限。当你在项目中大量使用触发器,那么你应该注意以下几点,以避免触发器不按预期效果执行:

  1. 如果需要变动整个数据集而数据集数据量又较大时,触发器效果会非常低;因为MySQL触发器为行级触发器
  2. 每一个表的一个事件只能定义一个触发器,例如:不能够定义两个AFTER INSERT触发器,但是可以定义一个BEFORE INSERT和一个AFTER INSERT
  3. 不能在视图(view)上建立触发器,因为视图本质不是表而是SELECT语句

本期教程至此全部结束啦,创作不易,如果觉得有用请一键三连,感谢您的配合!