实例:在一个基表上创建insert,update,delete这三个触发器,将对基表的操作保存在监控表中,达到监控基表的操作过程
创建基表table_trigger1
createtabletable_trigger1(
id1char(10),--id1,唯一
name1char(20),--姓名
primarykey(id1)-----基表必须要有关键子,不然通过监控表无法获知对哪一行数据进行了操作
)
创建监控表
createtabletable_trigger2(
id2char(10),--id2,对应操作基表的id1,这里的id2不能设置为主键,因为对基表的某一行可以操作多次
kindvarchar(1),--类型,用I来表示insert,U来表示update,D来表示delete
time2datetimeyeartofraction(5)--时间,表示操作发生的时间
)
创建3个触发器:
insert触发器
createtriggertrigger_insert--创建trigger_insert触发器
insertontable_trigger1--在基表table_trigger1表创建insert触发事件
referencingNEWasnew--定义new在后面要使用
foreachrow--使用referencing语句的前提条件,必须加上
(
insertintotable_trigger2(id2,kind,time2)//向监控表table_trigger2插入数据
values(new.id1,'I',current)//current表示触发时的时间
);
update触发器
createtriggertrigger_update
updateontable_trigger1
referencingOldasold
foreachrow
(
insertintotable_trigger2(id2,kind,time2)
values(old.id1,'U',current)
);
delete触发器
createtriggertrigger_delete
deleteontable_trigger1
referencingOldasold
foreachrow
(
insertintotable_trigger2(id2,kind,time2)
values(old.id1,'D',current)
);
测试:
执行下面4句sql语句
insertintotable_trigger1values('1','name1');
insertintotable_trigger1values('2','name');
updatetable_trigger1setname1='newName1'whereid1='1';
deletetable_trigger1whereid1='2';
在监控表table_trigger2中的数据:
id2kindtime2
1I发生时刻
2I发生时刻
1U发生时刻
2D发生时刻
通过监控表就可以详细的知道table_trigger1表的数据变化情况了
相关阅读
- 暂无推荐
《》由网友“”推荐。
转载请注明: