Oracle的触发器

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

1.什么是触发器

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

2.触发器的应用场景

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

3.创建.触发器的语法

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

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


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值