上次就触发器进行了简答解释:触发器是指通过某些事件自动启动或者触发的程序。
本次针对触发器种类进行简单的说明,并对其中最常用的一种进行详细说明。
首先触发器大体分为3大类:
1.DML触发
2.DDL触发器
3.其他
最常用的的是“DML触发器”:就是对特定表进行DML操作(INSERT、UPDATE、DELETE等)时启动的触发器。
接下来是“DDL触发器”:这是针对DDL操作(CREATE、ALTER、DROP等)启动的触发器。
另外,作为“其他”:以上2类以外的归为一类:
譬如:・登录或注销数据库时启动的触发器
・启动或停止数据库时启动的触发器
・发生错误时启动的触发器
等等
最常用的是DML触发器,他又分为2类:全表触发器和行触发器。
全表触发器:就是针对表的DML操作只能启动一次触发器。
行触发器:在每一行处理时启动的触发器。
例如,有一个UPDATE文,表中的3行数据会被更新。
如果在这里分别设定了在UPDATE启动的全表触发器和行触发器的话,全表触发器只会启动一次;
而行触发器,每行更细多会触发一次,所以会启动3次,就是说,行触发是在更新数据行对象的时候启动的。
行触发器重要的特征是“行触发的时候还可以参照该行的某列的值”。
譬如触发器中可以使用更新前的值也可以使用更新后的值。
也就是说,如果触发器进行某个处理的时候,需要使用行的列值,则用行触发器来实现。
行触发器还可以分为2大类BEFORE和AFTER:
在BEFORE的情况下,在DML处理之前启动触发器。
AFTER在DML处理后启动的触发器。
最终,DML触发器分为4类:
・BEFORE的表级别的触发器
・BEFORE的行级别的触发器
・AFTER的行级别的触发器
・AFTER的表级别的触发器
假如,以上4种触发器全部定义的话,他们是有启动顺序的:
首先,最先启动的触发是“BEFORE的表级别的触发器”。 这个只启动一次。
接下来启动的是行触发器:
首先将光标移到要更新的第一行,然后在该行上启动“BEFORE的行触发器”。
之后,该行被更新,更新之后在该行上启动“AFTER的行触发器”。
第1行的处理结束后,移动到要更新的第二行,重复相同的操作,启动“BEFORE的行触发器”和“AFTER的行触发器”。
重复相同的操作,直到最后一行更新完为止。
各行的处理全部结束后,最后只启动一次“AFTER的表级别的触发器”。
这就是触发器分类,以及DML触发器的内容。