触发器知识总结

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Oracle知识总结——触发器

1.数据库触发器(DataBase Trigger)是存储在数据库中的过程,

当表被修改时它隐式地被激发(执行)。

2.在Oracle中允许在对表进行insert、update或delete操作时隐

式地执行所定义的过程,这些过程称为数据库触发器。

3.触发器的作用:

(1)自动生成导出的列值。

(2)防止无效的事务。

(3)实施更复杂的安全性检查。

(4)在分布式数据库中实施跨越结点的引用完整性。

(5)实施复杂的事务规则。

(6)提供透明事件日志。

(7)提供高级审计。

(8)维护同步表的复制。

(9)收集关于存取表的统计。

4.触发器的优点:

(1)触发器是自动的:当对表中的数据作了任何修改之后立即被激活。

(2)触发器可以通过数据库中的相关表进行层叠更改。

(3)触发器可以强制限制,这些限制比用check约束所定义的更复杂。

5.触发器的分类:

(1)D ML触发器:由对表的insert、delete、update激发。

(2)I nstead of 触发器:代替直接对视图insert、delete、update操作。

(3)系统触发器:

<1>DDL事件(create、alter、drop语句),需要

admistrater、datebase、trigger特权。

<2>数据库事件:服务器启动、关闭、用户登录、注销、

服务器错误等。

6.创建触发器语法:

Create [or replace] trigger [模式] 触发器名

Before | after insert | delete | (update of 列名) On 表名

[for each row]

When 条件

PL/SQL 块

注释:

For each row的意义是:在一次操作表的语句中,每操作成功一行就会触发一次;不写的话,表示是表级触发器,则无论操作多少行,都只触发一次。

When条件的出现说明了,在DML操作的时候也许一定会触发触发器,但是触发器不一定会做实际的工作,比如when后面的条件不为真的时候,触发器只是简单地跳过了PL/SQL块。

7.创建触发器应该注意:

(1)t runcate table语句类似与没有where子句(用于删除行)的delete语句,不会引发触发器,因为truncate table

语句没有记录,删除时,不会写日志。

(2)w ritetext语句不会引发insert或update触发器。

(3)当创建一个触发器时必须指定:

<1>名称。

<2>在其上定义触发器的表。

<3>触发器将何时激发。

<4>激活触发器的数据修改语句。

8.触发器的原理:

(1)每个触发器有两个特殊的表:插入表和删除表。这两个表是逻辑表。并且这两个表是由系统管理的,存储在内存中,而

不是数据库中,因此不允许用户直接对其修改。

(2)这两个表的结构总是与被该触发器作用的表的结构相同。这两个表是动态驻留在内存中,当触发器的工作完成,这两个

表也被删除。

(3)这两个表的主要保存因用户操作而影响到得原数据值或新数据值。

(4)这两个表是只读的,用户不能向这两个表写入数据,但是可以引用表中的数据。

9.new与old:

(1)必须是针对行级触发器的,也就是说要使用这两个变量

的触发器一定有for each row。

(2)这两个变量是系统自动提供的数组变量,new用来记录

新插入的值,old用来记录被删除的值。

(3)使用insert的时候只有:new里有值。

(4)使用delete的时候只有:old里有值。

(5)使用update的时候:new和old里都有值。

10.instead of 触发器的原理:

(1)当为表或视图定义针对某一操作(insert、delete、update)的instead of类型的触发器且执行了相应的操作时,尽管

触发器被触发,但相应的操作并不被执行而运行的仅是触发

器的SQL语句本身。

(2)I nstead of 触发器主要优点是:使不可修改的视图能够支持修改。其中最典型的是分割视图。为了提高查询的性能,

分割视图通常来自多个表的结果集,但是也正是因此而不支

持视图的更新。

(3)通过使用逻辑语句以执行批处理的某一部分而放弃执行其余的部分,可以定义触发器在遇到某一错误时,转而执行触

发器的另外部分。

(4)I nstead of insert 执行你在触发器里面的代码,替代系统insert操作。

11.创建Instead of 触发器注意:

(1)c reate trigger语句必须是批处理中的第一个语句。(2)创建触发器的权限默认分配给表的所有者,且不能将该权限转给其他用户。

(3)触发器为数据库对象,其名称必须遵循标识符的命名规则。(4)虽然触发器可以引用当前数据库以外的对象,但只能在当前数据库中创建触发器。

(5)虽然不能在临时表或系统表上创建触发器,但是触发器可以引用临时表。

相关文档
最新文档