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的条件,能够指定哪一行。



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



  • 相关阅读:
    java线程的几种状态
    java事务的处理
    Java多线程中Sleep与Wait的区别
    分享一百多套开发视频教程的下载地址
    [Java]读取文件方法大全
    Android开发人员必备的10 个开发工具
    CentOS 安装MySQL rpm方式安装
    记录一些经典的算法
    CentOS 7安装Redis服务
    linux查看文件大小,磁盘占用情况 du df命令
  • 原文地址:https://www.cnblogs.com/tlnshuju/p/7172164.html
Copyright © 2011-2022 走看看