触发器知识总结
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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)虽然不能在临时表或系统表上创建触发器,但是触发器可以引用临时表。