过去做项目。
都是前端后台的编码。由于数据库都让项目经理给写好的。自己对于数据库并没有多少优化,时间久了,反而把数据库的知识给淡忘了,近期的项目用到的是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.触发器的应用场景
- 复杂的安全性检查
- 数据的确认
- 数据库的审计
- 数据的备份和同步
另外一种:数据的确认,比方你拿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>//运行块
- 语句级触发器:在指定的操作语句操作之前或之后运行一次。无论这条语句影响了多少行,仅仅运行一次。
- 行级触发器:触发语句作用的每一条记录都被触发。在行级触发器中使用 :old 和 :new伪记录变量,识别值的状态
我在以下举例说明吧。
样例:我们要在把员工表中的一个字段数据(有三条)插入到新的一个表中。
<span style="white-space:pre"> </span>INSERT INTO EMP10 SELECT * FROM EMP WHERE NAME = 10;假设是语句级触发器的话,仅仅触发一次。由于语句级触发器:针对的是表,
而行级触发器。前面也说了,是三条记录,自然会触发三次行级触发器,也就是,针对的是行。就如前面的语法中。行级触发器FOR EACH ROW 语句,后面也能够加WHEN的条件,能够指定哪一行。
这些是触发器的介绍。看到这里。大家就能明确触发器是什么,干什么用的,在什么情景下使用了。尽管这篇非常基础,但对于新人还是有些帮助的。