六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 262|回复: 0

Informix触发器实例

[复制链接]

升级  44%

6

主题

6

主题

6

主题

童生

Rank: 1

积分
22
 楼主| 发表于 2013-1-14 23:26:43 | 显示全部楼层 |阅读模式
informix触发器事件包括INSERT、UPDATE、DELETE与select(这里暂不讨论);触发时间可以为三个时刻:1.触发器事件执行之前(BEFORE)2.触发器事件执行之后(AFTER)3.触发器事件执行过程中(FOR EACH ROW)触发时间开始后,可以通过SQL语句来执行特定的,操作包括INSERT,DELETE,UPDATE与EXECUTE PROCEDURE

INSERT触发器的语法如下:CREATE TRIGGER trigger_name INSERT ON table_name           BEFORE [WHEN (condition)] (trig_action1,trig_action2,...)|          FOR EACH ROW [WHEN (condition)] (trig_action1,trig_action2,...)|          AFTER [WHEN (condition)] (trig_action1,trig_action2,...)|        [DISABLED|ENABLED]or         CREATE TRIGGER trigger_name INSERT ON table_name          REFERENCING NEW AS correlation_name          FOR EACH ROW [WHEN (condition)] (trig_action1,trig_action2,...)          [BEFORE [WHEN (conditon)](trig_action3,trig_action4,...)]|          [AFTER [WHEN (conditon)] (trig_action3,trig_action4,...)]        [DISABLED|ENABLED]

DELET触发器的语法如下:CREATE TRIGGER trigger_name DELETE ON table_name           BEFORE [WHEN (condition)] (trig_action1,trig_action2,...)|          FOR EACH ROW [WHEN (condition)] (trig_action1,trig_action2,...)|          AFTER [WHEN (condition)] (trig_action1,trig_action2,...)|        [DISABLED|ENABLED]or         CREATE TRIGGER trigger_name DELETE ON table_name          REFERENCING NEW AS correlation_name          FOR EACH ROW [WHEN (condition)] (trig_action1,trig_action2,...)          [BEFORE [WHEN (conditon)](trig_action3,trig_action4,...)]|          [AFTER [WHEN (conditon)] (trig_action3,trig_action4,...)]        [DISABLED|ENABLED]

UPDATE触发器的语法如下:CREATE TRIGGER trigger_name UPDATE [OF (column,column,...)] ON table_name           BEFORE [WHEN (condition)] (trig_action1,trig_action2,...)|          FOR EACH ROW [WHEN (condition)] (trig_action1,trig_action2,...)|          AFTER [WHEN (condition)] (trig_action1,trig_action2,...)|        [DISABLED|ENABLED]  or         CREATE TRIGGER trigger_name UPDATE [OF (column,column,...)] ON table_name           REFERENCING NEW AS correlation_name OLD AS correlation_name          FOR EACH ROW [WHEN (condition)] (trig_action1,trig_action2,...)          [BEFORE [WHEN (conditon)](trig_action3,trig_action4,...)]|          [AFTER [WHEN (conditon)] (trig_action3,trig_action4,...)]        [DISABLED|ENABLED]

触发器语法:trigger_name  用户定义的触发器名,在数据库中唯一,不超过18个字符,以字母开始。       INSERT是一个触发器事件,表中插入行时触发器被激活,一个表只有一个INSERT触发器,      DELETE是一个触发器事件,表中删除行时触发器被激活,一个表只有一个DELETE触发器。      UPDATE是一个触发器事件,表中根性列时触发器被激活,如果包括列清单,则更新列清单中的列时触发器被激活。否则更形表中任何列时触发器被激活,一个表可以有多个UPDATE触发器。但是列清单要相互排斥。      ENABLED指定启动触发器,即执行触发器事件时即激活触发器。这是生成触发器时的默认值。      DISABLED指定生成但关闭触发器,即执行触发器事件时不激活触发器。

实例:在一个基表上创建insert,update,delete这三个触发器,将对基表的操作保存在监控表中,达到监控基表的操作过程创建基表table_trigger1create table table_trigger1 (id1 char(10), --id1,唯一name1 char(20), --姓名primary key(id1) -----基表必须要有关键子,不然通过监控表无法获知对哪一行数据进行了操作)创建监控表create table table_trigger2 (id2 char(10), --id2,对应操作基表的id1,这里的id2不能设置为主键,因为对基表的某一行可以操作多次kind varchar(1), --类型,用I来表示insert,U来表示update,D来表示deletetime2 datetime year to fraction(5) --时间,表示操作发生的时间)创建3个触发器:insert触发器create trigger trigger_insert -- 创建trigger_insert 触发器insert on table_trigger1 --在基表table_trigger1表创建insert触发事件referencing NEW as new --定义new 在后面要使用for each row --使用referencing语句的前提条件,必须加上(insert into table_trigger2 (id2,kind,time2) //向监控表table_trigger2插入数据values (new.id1,'I',current) //current表示触发时的时间);update触发器create trigger trigger_updateupdate on table_trigger1referencing Old as oldfor each row(insert into table_trigger2 (id2,kind,time2)values (old.id1,'U',current));delete触发器create trigger trigger_deletedelete on table_trigger1referencing Old as oldfor each row(insert into table_trigger2 (id2,kind,time2)values (old.id1,'D',current));测试:执行下面4句sql语句insert into table_trigger1 values ('1','name1');insert into table_trigger1 values ('2','name');update table_trigger1 set name1='newName1' where id1='1';delete table_trigger1 where id1='2';在监控表table_trigger2中的数据:id2   kind   time21     I      发生时刻2     I      发生时刻1     U      发生时刻2     D      发生时刻通过监控表就可以详细的知道table_trigger1表的数据变化情况了
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表