實(shí)例:在一個(gè)基表上創(chuàng)建insert,update,delete這三個(gè)觸發(fā)器,將對(duì)基表的操作保存在監(jiān)控表中,達(dá)到監(jiān)控基表的操作過程
創(chuàng)建基表table_trigger1
create table table_trigger1 (
id1 char(10), --id1,唯一
name1 char(20), --姓名
primary key(id1) -----基表必須要有關(guān)鍵子,不然通過監(jiān)控表無法獲知對(duì)哪一行數(shù)據(jù)進(jìn)行了操作
)
創(chuàng)建監(jiān)控表
create table table_trigger2 (
id2 char(10), --id2,對(duì)應(yīng)操作基表的id1,這里的id2不能設(shè)置為主鍵,因?yàn)閷?duì)基表的某一行可以操作多次
kind varchar(1), --類型,用I來表示insert,U來表示update,D來表示delete
time2 datetime year to fraction(5) --時(shí)間,表示操作發(fā)生的時(shí)間
)
創(chuàng)建3個(gè)觸發(fā)器:
insert觸發(fā)器
create trigger trigger_insert -- 創(chuàng)建trigger_insert 觸發(fā)器
insert on table_trigger1 --在基表table_trigger1表創(chuàng)建insert觸發(fā)事件
referencing NEW as new --定義new 在后面要使用
for each row --使用referencing語句的前提條件,必須加上
(
insert into table_trigger2 (id2,kind,time2) //向監(jiān)控表table_trigger2插入數(shù)據(jù)
values (new.id1,'I',current) //current表示觸發(fā)時(shí)的時(shí)間
);
update觸發(fā)器
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觸發(fā)器
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)
);
測(cè)試:
執(zhí)行下面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';
在監(jiān)控表table_trigger2中的數(shù)據(jù):
id2 kind time2
1 I 發(fā)生時(shí)刻
2 I 發(fā)生時(shí)刻
1 U 發(fā)生時(shí)刻
2 D 發(fā)生時(shí)刻
通過監(jiān)控表就可以詳細(xì)的知道table_trigger1表的數(shù)據(jù)變化情況了