对于示警或满足特定条件下自动执行某项任务来讲,触发器是非常有用的机制。其定义包
括两个方面:指明触发器的触发事件,指明触发器执行的动作。
触发事件包括表中行的插入、删除和修改,即执行INSERT、DELETE. UPDATE语句。
在修改操作(UPDATE)中,还可以指定特定的属性或属性组的修改为触发条件。事件的触发
还有两个相关的时间:Before和After。Before触发器是在事件发生之前触发,A仕er触发器是
在事件发生之后触发.创建触发器语句格式如下:
CREATE TRIGGER〈触发器名)[{BEFORE | AFTER}]
{ [DELETE I INSERT | UPDATEOF [列名清单]]}
ON表名
[REFERENCING <临时视图名〉]
[WHEN<触发条件〉]
BEGIN
V触发动作〉
END [触发器名]
说明:
(1) BEFORE:指示DBMS在执行触发语句之前激发触发器。
(2) AFTER:指示DBMS在执行触发语句之后激发触发器。
(3)DELETE:指明是DELE邛触发器,每当一个DELETE语句从表中删除一行时激发
触发器。
(4)INSERT:指明是INSERT触发器,每当一个INSERT语句向表中插入一行时激发触发器。
(5)UPDAIE:指明是UPDATE触发器,每当UPDATE语句修改由OF子句指定的列值时,
激发触发器。如果忽略OF子句,每当UDPATE语句修改表的任何列值时,DBMS都将激发触
发器。
(6)REFERENCING<临时视图名指定临时视图的别名。在触发器运行过程中,系统
会生成两个临时视图,分别存放被更新值〈旧值)和更新后的值(新值)。对于行级触发器,
默认临时视图名分别是OLD和NEW;对于语句级触发器,默认临时视图名分别是OLD-TABLE
和NEW-TABLE。一旦触发器运行结束,临时视图就不在。
(7)WHENV触发条件指定触发器的触发条件。当满足触发条件时,DBMS才激发触
发器。触发条件中必须包含临时视图名,不包含查询.
Referencing old table as或Referencing new table as子句可以用来指向临时表(也称过渡表)
来容纳所有被影响的行。无论临时表是语句触发器还是行触发器,它们都不能用before触发器,
但是可以用after触发器。
触发器事件和动作可以有很多形式,除了 update以外还可以是Insert, delete =例如,如果
有一个新的用户存款插入时,触发器动作可以给用户发一封欢迎信。显然一个触发器不能直接对数据库之外的事情进行操作,但是它可以在存储待发欢迎信地址的关系中添加一个元组。一个专用进程会检查这个表,打印出要发出的欢迎信。
触发器在事件(update、luseit利delete)之前被激发,而不是在事件之后。这种触发器可作为避免非法更新的额外约束。例如,有时用户不允许透支,此时,可以建立一个before触发
器在新的余额是负数时回滚事务。