CREATE[ORREPLACE]TRIGGER'触发器名'
BEFORE |AFTER-- 触发时间。[DELETE][[OR]INSERT][[OR]UPDATE[OF'列名']]-- 触发事件。ON'表名'[FOR EACH ROW][WHEN('条件')]declare-- ...声明变量begin'PLSQL块'End;-- `FOR EACH ROW`:指定对于受触发事件影响的每一行,都要激活触发器的动作。
FOR EACH ROW: 是标注此触发器是 行级触发器、语句级触发器。
在触发器中 触发语句 与 伪记录变量 的值。
在触发器创建中,每个表每个事件每次只允许一个触发器。
一个表最多支持 6 个触发器。
触发语句
:old
:new
Insert
所有字段都是空(null)
将要插入的数据
update
更新以前该行的值
更新后的值
delete
删除以前该行的值
所有字段都是空(null)
CREATETRIGGER`test`.`customers_insert_trigger`AFTERINSERTON`test`.`customers`FOR EACH ROWSET@str='one customers added!'
CREATETRIGGER`test`.`customers_insert_trigger`AFTERINSERTON`test`.`customers`FOR EACH ROWSET@str= NEW.cus_id;-- NEW:虚拟表,用来访问新插入的行(在`INSERT、UPDATE`触发器,不区分大小写)。-- OLD:虚拟表,用来访问被删除的行(在`DELETE、UPDATE`触发器,不区分大小写)。
CREATETRIGGER`test`.`customers_update_trigger`
BEFORE
UPDATEON`test`.`customers`FOR EACH ROWSET NEW.cus_address = OLD.cus_contact;