触发器可以分为INSERT触发器、UPDATE触发器、DELETE触发器。INSERT 触发器在对表或视图执行INSERT语句时触发,UPDATE触发器在对表或视图执行UPDATE操作时执行,DELETE触发器在对表或视图执行DELETE操作时执行。
在触发器中有两个变量非常重要,它们是NEW和OLD。NEW表示新添加的值,OLD表示原来的值。
触发器的语法如下:
Create [or replace] trigger 触发器名称
{before |after|inserted of}1
{insert|update|delete[of
[or
On
[refrencing
[for each row]4
[when (条件)]5
[declare
Begin
触发器主体
[exception
End [触发器名称]
需要解释的是:1处表示触发器是在操作之前还是在之后触发,举例若是验证数据的合法性,可在前验证后插入。不过inserted of是针对视图来说的对于视图操作时,触发器的处理代码则替代对视图的操作2表示触发器的类型,表示哪一种触发器,并且是在操作那一列时触发的限定条件,操作该列可触发触发器 。3refrencing:触发器对insert,update,delete操作时,存在新旧数据的问题,新数据采用new对象表示,旧数据采用old对象来表示,在insert中,new表示要插入的数据,此时old没有意义。在delete中,old表示已删除的数据,此时new没有意义。在update中,new表示已更新的新数据,old表示更新前的旧的数据。New和old是记录对象,refrencing子句可以对new和old指定一个别名。4表示是行级触发器,每次对行操作时,都会触发触发器,处理代码都会执行。如果没有,则只触发一次,处理代码只执行一次。5限制触发器的条件,表示什么时候执行触发器。
另外注意的是,触发器和触发语句同在一个屋檐(事务)下,一起提交执行,一起回滚。
如下例子:insert触发器
create or replace trigger trigger_insert
after
insert
on testss
for each row
end;
当向testss中插入数据时,则触发trigger_insert触发器,目的是向名称为testtime的表中插入记录,记录操作者名称和操作时间。其中的:new.id是代表的testss中的id,同样的:new.names也代表的是testss中的names属性。Sysdate是系统时间。
其他两个触发器update和delete触发器和insert触发器的使用方法方式基本相同,不在赘述。那么使用触发器的好处是什么呢?个人觉得触发器就像是机关或者说是地雷,在满足一些条件的时候,自动的做一些事情,是事情变得简单易处理。例如银行的数据库应该会有很多的触发器,每一步或每一次的数据库操作都会触发触发器,记录相应的操作过程或操作数据,会有大量的操作文档,保证数据的安全和完整性。总之,触发器就是满足一定的条件之后就去执行一些动作,跟if语句有点像,我们想做些什么,只要写好处理语句,再写好触发条件就ok了。