欢迎投稿

今日深度:

Oracle的触发器

Oracle的触发器


过去做项目。都是前端后台的编码。因为数据库都让项目经理给写好的。自己对于数据库并没有多少优化,时间久了,反而把数据库的知识给淡忘了,最近的项目用到的是Oracle数据库,大家都知道,用到这个数据库,就是数据量比较大的项目了。对于优化就有必要了。因此自己下班后抽空复习一下,并把这个记录下来,不只是分享给大家,还能以后自己再次复习。若我讲得不对,请留言更正,本人会虚心接受并改更,这样才能进步。

1.什么是触发器

每当一个特定的数操作语句(insert,update,delete)在指定的表上发出时,Oracle自动的执行触发器中定义的语句序列。这个定义,大家看到就能明白触发器的作用了,增删改查,为什么触发器没有查询呢。因为Oracle的触发器是针对数据变动时所触发的一种待定行动。比如你删除了一个表中的字段,删除触发器就会启动,执行他的命令。同理,修改和增加方法也是一样。只要你执行了增删改方法,从而改变了表的数据时,你所设定相应的触发器就会执行。 例子:每当成功插入新员工后,自动打印一句话“成功插入新员工”;
create trigger saynewemp	//创建一个触发器 saynewemp是触发器的名字
after insert			//执行插入方法后触发
on emp				//针对是哪个表
declare				//声明
begin				//开始
   dbms_output.put_line("成功插入新员工")	//触发时打印一句话
end;						//结果
一个员工表的插入触发器就写好了。只要我们对员工表执行insert插入操作后,就会执行触发器中的行为,如上所示,会自动打印一句话。

2.触发器的应用场景

复杂的安全性检查数据的确认数据库的审计数据的备份和同步 第一种:复杂的安全性检查,就比如我们项目中的需求,如果有周末放假不能对数据库进行改变,那我们就可以用触发器对他进行限制 第二种:数据的确认,比如你拿100块买1块钱的东西的时候,老板找钱给你时,你是不是要数一数,确认一下是否有没有错呢 第三种:数据库的审计,他是针对数据库的操作记录,可以记录谁对数据库进行了什么操作,Oracle已经有自带的这种功能,我们也可以自己用触发器实现他 第四种:数据的备份和同步,这个也好理解,就是当你对数据库进行操作以后,就触发备份操作,这有点像单机游戏英雄无敌里的游戏保存一样,当轮到你操作时,就会自动执 行一次自动保存。

3.创建.触发器的语法

CREATE[or REPLACE]TRIGGER 触发器的名字	//创建一个触发器
{BEFORE|AFTER}				//触发器执行的顺序,是方法前还是方法后执行
{DELETE|INSERT|UPDATE(OF 列名)}		//给哪个方法设置触发器,在UPDATE方法中,可以用OF指明哪一列名
ON 表名					//哪个表
[FOR EACH ROW[WHEN(条件)]]		//如果有FOR EACH ROW,那就是行级触发器,反之,就是语句触发器
PLSQL块					//执行块
语句级触发器:在指定的操作语句操作之前或之后执行一次,不管这条语句影响了多少行,只执行一次。行级触发器:触发语句作用的每一条记录都被触发,在行级触发器中使用 :old 和 :new伪记录变量,识别值的状态 是不是很抽象呢,其实大家从名字就可以清楚知道他们的分别。我在下面举例说明吧。 例子:我们要在把员工表中的一个字段数据(有三条)插入到新的一个表中,
	INSERT INTO EMP10 SELECT * FROM EMP WHERE NAME = 10;
如果是语句级触发器的话,只触发一次,因为语句级触发器:针对的是表, 而行级触发器,前面也说了,是三条记录,自然会触发三次行级触发器,也就是,针对的是行。就如前面的语法中,行级触发器FOR EACH ROW 语句,后面也可以加WHEN的条件,可以指定哪一行。

这些是触发器的介绍。看到这里,大家就能明白触发器是什么,干什么用的,在什么情景下使用了。虽然这篇很基础,但对于新人还是有些帮助的。

www.htsjk.Com true http://www.htsjk.com/oracle/23593.html NewsArticle Oracle的触发器 过去做项目。都是前端后台的编码。因为数据库都让项目经理给写好的。自己对于数据库并没有多少优化,时间久了,反而把数据库的知识给淡忘了,最近的项目用到的是...
评论暂时关闭