zoukankan      html  css  js  c++  java
  • 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的条件,能够指定哪一行。



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



  • 相关阅读:
    codeforces C. Fixing Typos 解题报告
    codeforces B. The Fibonacci Segment 解题报告
    codeforces B. Color the Fence 解题报告
    codeforces B. Petya and Staircases 解题报告
    codeforces A. Sereja and Bottles 解题报告
    codeforces B. Levko and Permutation 解题报告
    codeforces B.Fence 解题报告
    tmp
    API 设计 POSIX File API
    分布式跟踪的一个流行标准是OpenTracing API,该标准的一个流行实现是Jaeger项目。
  • 原文地址:https://www.cnblogs.com/tlnshuju/p/7172164.html
Copyright © 2011-2022 走看看