Informix觸發器例項

2021-06-23 05:44:48 字數 4569 閱讀 7009

**:

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_trigger1

create 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來表示delete

time2 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_update

update on table_trigger1

referencing old as old

for each row

(insert into table_trigger2 (id2,kind,time2)

values (old.id1,'u',current)

);delete觸發器

create trigger trigger_delete

delete on table_trigger1

referencing old as old

for 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 time2

1 i 發生時刻

2 i 發生時刻

1 u 發生時刻

2 d 發生時刻

通過監控表就可以詳細的知道table_trigger1表的資料變化情況了

觸發器例項

sql server 觸發器例項 基本語法 幫助裡的語法太長了 create trigger triggername on tablename for insert delete update as 觸發器要執行的操作語句.go注意 觸發器中不允許以下 transact sql 語句 alter d...

觸發器例項

建立乙個插入操作的觸發器 當向學生選課表sc中插入一條記錄後,變更在學生表student對應學生的選課門數。create trigger stu in onsc 對哪個表或者檢視進行操作 forinsert 設定觸發條件,也就是在什麼情況下會觸發這個觸發器 asupdate student sets...

mysql條件觸發器例項 mysql觸發器例項一則

例子,例項學習mysql觸發器的用法。一,準備二張測試表 1,測試表1 複製 示例 drop table if exists test create table test id bigint 11 unsigned not null auto increment,name varchar 100 n...