触发器Trigger是由insert、update和delete等事件来触发某种特定操作。在满足触发器的触发条件时,数据库系统就会执行触发器中定义好的程序语句,这样可以保证某些操作之间的一致性。

1、创建触发器

1.1 创建只有一个执行语句的触发器

基本语句如下

MySQL指定触发器的参数 mysql触发器执行顺序_MySQL指定触发器的参数


其中,before和after表示触发器执行的时间,前者表示在触发事件之前执行处罚语句,后者反之;触发事件指触发的条件,包括insert、update和delete;for each row表示任意一条记录上的操作满足触发事件都会触发该触发器;那么执行语句自然就是触发器被触发后执行的程序了。

1.2 创建具有多个执行语句的触发器

基本语句如下

MySQL指定触发器的参数 mysql触发器执行顺序_触发器_02


在程序块“执行语句列表”中,不同执行语句之间用分号隔开。

特别注意,一般来说,MySQL中默认分号为结束符号,如此一来在输入创建命令时可能会出问题,我们可以如此解决:借用语句Delimiter,它可以改变结束符号,即在创建触发器程序之前,用delimiter %%语句先将结束符号定义为%%,这样后续的触发器定义程序段中的分号就不会起作用了,在定义完触发器后,以%%结束,最后再用delimiter;语句将结束符号改回分号。

注意,对于一个表在相同触发时间的相同触发事件,只能创建一个触发器。

2、查看触发器

2.1 Show Triggers语句查看基本信息

Show Triggers;

显然此语句只能查询所有触发器,而不能针对性查询某个触发器。

2.2 在triggers表中查看详细信息

由于所有触发器的信息都存储在information_schema数据库下的triggers表中,可用下述语句

select * from information_schema.triggers;

如果要查询特定触发器,可以用下述语句

select * from information_schema.triggers where trigger_name=’触发器名’;

3、触发器的使用

触发器的执行顺序按before触发器、表操作(insert、update、delete)和after触发器的顺序。
在激活触发器时,对触发器中的执行语句有一些限制,例如触发器不能包含start transaction、commit或者rollback等关键词,也不能包含call语句。
注意,触发器执行过程中,任何步骤上的错误都会使程序停止继续执行。但对于普通表来说,已经更新过的表是不能回滚的,更新后的数据将继续保持在表中,而此时可能没有引起触发操作,所以,在设计触发器时要谨慎。

4、删除触发器

基本形式如下

Drop trigger 触发器名;

如果只指定触发器名称,数据库系统会在当前数据库中查找该触发器,如果需要指定数据库,可以表示为A.a,其中A为数据库名,a为触发器名。
谨记,如果某个触发器不再需要使用,一定要将其删除。否则每次执行触发事件时都会执行触发器中的执行语句,对数据库中的数据进行某些操作。