PL/SQL 触发器

概述

  触发器时大型关系型数据都会提供的一种技术,用来监视数据库的各种操作。

触发器的基本原理

  触发器类似于过程、函数,其包括声明部分和异常处理部分,并且都有名称,都存储在数据库中。但是于普通的函数、过程不同的是:函数需要用户显示的调用才能完成,触发器则是当某件事发生的时,由数据库自动执行。

触发器的基本原理

触发器的类型

触发器的类型分为三种

  • DML触发器:对表或者视图执行DML操作时触发。
  • INSTEAD OF 触发器: 只定义在视图上用来执行替换实际的操作语句
  • 系统触发器:在对数据库系统进行操作(如DDL语句、启动或者关闭数据等系统事件)时触发。
相关概念
1.触发事件

  引起触发器被触发的事件。如DML语句(INSERT,UPDATE,DELETE语句对表或者视图执行数据处理操作)、DDL语句(CREATE,ALTER,DROP语句在数据库中创建,修改,删除模式对象)、数据库系统事件(系统的启动和退出,异常错误)、用户事件(如登录和退出数据库)。

2.触发条件

  触发条件是由WNEN子句指定一个逻辑表达式。只有当该表达是的值为TRUE的时候,遇到的出发时间才能自动执行触发器,使其执行触发操作,否则即便是遇到了触发事件也不会执行触发器。(不使用WHEN触发条件的时候,默认应该是遇到触发事件都执行触发器

3.触发对象

  触发对象包括表、视图、模式、数据库。只有在这些对象上发生了符合触发条件的触发事件,才会执行触发操作。

4.触发时机

  触发时机指的是触发器的触发时间。如果指定为BEFORE,则在DML操作前触发以便防止某些错误操作发生或实现某些业务规则;如果指定为AFTER,则在DML操作之后触发,以便记录该操作或做某些时候处理。

5.条件谓词

  当触发器中包含了多个触发事件(INSERT,UPDATE,DELETE)的组合时,为了分别针对不同的事件进行不同给的处理,需要使用ORACLE数据库提供的条件谓词。

  • INSERTING: 当触发事件时INSERT时,取值为TRUE,否则取值为FALSE
  • UPDATING[(column1,column2,……)]:当触发事件时UPDATE时,如果修改了columnx列,则取值为TRUE,否则取值为FALSE,其中columnx是可选的。
  • DELETING:当触发事件是DELETE时,取值为TRUE,否则取值为FALSE.
6.触发子类型

  触发子类型分为行触发(row)和语句触发(statement)。行触发即对每一行进行操作时都要触发,而语句触发只是对这种操作触发一次。一般机型SQL语句操作时都应该时行触发,只有对整个表的安全进行检查时才是语句触发。如果此项省略,默认的触发时语句触发

  除此之外触发器中还由两个相关的值,分贝对应触发的行中的旧表值和新表值,用old和new来表示。在oracle中使用这两个值,在触发条件部分不需要加冒号,而在出发提中需要加冒号:old和:new。在mysql中不能加冒号。

创建触发器

CREATE <OR REPLACE> TRIGGER <触发器名>
触发条件
DECLARE
定义声明
BEGIN
操作
END <触发器名>

举例:

create or replace trigger testTrigger
  BEFORE DELETE
  on test 
  FOR EACH ROW 
declare

BEGIN
  INSERT INTO T VALUES('1','2',:OLD.AD_NM);
end testTrigger;

删除触发器

DROP TIGGER <触发器名>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值