SQL笔记 第九章

---- 第九章 TRIGGER ----

1. 触发器
 通过数据表的记录更改来执行一些审计功能,
  当表被修改的时候自动给其他需要执行操作的程序发信号
 用于维护数据的完整性,有些复杂的数据完整性约束
  无法在创建表的时候通过声明性约束解决
 1) 触发器与过程/函数的相同点
  a. 都是带有名字的执行块;
  b. 都有声明、执行体和异常部分;
 2) 触发器与过程/函数的不同点
  a. 触发器必须存储在数据库中;
  b. 触发器由触发事件自动激发(INSERT,UPDATE,DELETE)
  对于过程/函数来说,必须显式地由另一个运行块调用

2. 创建触发器
 1) 语法: CREATE [OR REPLACE] TRIGGER trigger_name
    {BEFORE|AFTER} triggering_event   
     ON table_reference
     [FOR EACH ROW [WHEN trigger_condition]]
    trigger_body;
 2) 范例:CREATE OR REPLACE TRIGGER UpdateMajorStats
    AFTER INSERT OR DELETE OR UPDATE
    ON students DECLARE CURSOR c_Statistics
    IS SELECT * FROM students GROUP BY major;
   BEGIN
    ...
   END Up;

3. 触发器
 1) 三个语句(INSERT/UPDATE/DELETE);
 2) 二种类型(之前/之后);
 3) 二种级别(row-level/statement-level);
  所以一个表最多可以定义的触发器数量一共有 3 X 2 X 2 = 12,
  这也使触发器的类型数量

4. 触发器的限制
 触发器的主体是PL/SQL语句块,所有能出现在PL/SQL块中的语句
 在触发器主体中都是合法的限制
 1) 不应该使用事务控制语句( COMMIT , ROLLBACK , SAVEPOINT )
 2) 不能声明任何LONG或LONG RAW变量;
 3) 可以访问的表有限。

5. 触发器的主体可以访问的表
 1) 不可以读取或修改任何变化表(被DML语句正在修改的表);
 2) 不可以读取或修改限制表(带有约束的表)的主键、唯一值、外键列。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值