1 创建
CREATE TRIGGER
CREATE TRIGGER trigger_name trigger_time trigger_event
ON tbl_name FOR EACH ROW trigger_stmt
作用:检查给表插入新的值或者进行表内的数值计算之类的更新。
只能定义在基本表上,不能定义在视图上。
trigger_time:触发程序的动作时间,BEFORE或AFTER
trigger_event:指明了激活触发程序的语句的类型。trigger_event可以是下述值之一:
(1)INSERT:将新行插入表时激活触发程序,例如,通过INSERT、LOAD DATA和REPLACE语句实现插入数据。
(2)UPDATE:更改某一行时激活触发程序,例如,通过UPDATE语句更新数据。
(3)DELETE:从表中删除某一行时激活触发程序,例如,通过DELETE和REPLACE语句删除数据。
trigger_stmt:当触发程序激活时执行的语句。如果执行多个语句,可使用BEGIN … END复合语句结构。
例1:
对SC的Grade属性修改时,若分数增加了10%,则将此次操作记录到SC_U表中:
SC_U(Sno,Cno,Oldgrade,Newgrade)
CREATE TRIGGER SC_T
AFTER UPGRADE OF Grade ON SC
REFERENCING
OLD row AS OldTuple,
NEW row AS NewTuple
FOR EACH ROW //行级触发器
WHEN (NewTuple.Grade>=1.1*OldTuple.Grade)
INSERT INTO SC_U(Sno,Cno,OldGrade,NewGrade)
VALUES(OldTuple.Sno,OldTuple.Cno,OldTuple.Grade,NewTuple.Grade)
例2:
CREATE TRIGGER Student_Count
AFTER INSERT ON Student
REFERENCING
NEW TABLE AS DELTA
FOR EACH STATEMENT
INSERT INTO StudentInsertLog(Numbers)
SELECT COUNT(*) FROM DELTA
2 删除
DROP TRIGGER
DROP TRIGGER [schema_name.]trigger_name
方案名称(schema_name)可选。如果省略了schema(方案),将从当前方案中舍弃触发程序。DROP TRIGGER语句需要相应权限。
3 激活
数据表上定义多个触发器,执行顺序:
(1)执行表上的BEFORE触发器;
(2)激活触发器的SQL语句;
(3)执行表上的AFTER触发器。