触发器介绍(转)
的数据时触发执行,它比数据库本身标准的功能有更精细和更复杂的51Testing软件测试网O+Hj(e%? Tt
数据控制能力。数据库触发器有以下的作用:51Testing软件测试网~Bf*X&g5Q;R|mzp
* 安全性。可以基于数据库的值使用户具有操作数据库的某种权51Testing软件测试网6p)c{?(CnOl5D
利。51Testing软件测试网bQC,iP(r s%Q"n
# 可以基于时间限制用户的操作,例如不允许下班后和节假日51Testing软件测试网5o M]e6k7O(c_
修改数据库数据。
(q9[Xp!s/RC0# 可以基于数据库中的数据限制用户的操作,例如不允许股票51Testing软件测试网5N6WZdH;Hq7@
的价格的升幅一次超过10%。51Testing软件测试网!lM(lE:D ^)}1E1Y3X
* 审计。可以跟踪用户对数据库的操作。51Testing软件测试网 O0_\y'G
# 审计用户操作数据库的语句。
Q)U;g P*A2fsoj8m4^[0# 把用户对数据库的更新写入审计表。51Testing软件测试网}4? CX d;S
* 实现复杂的数据完整性规则。
{/P.?(B*M%| K(xH0# 实现非标准的数据完整性检查和约束。触发器可产生比规则
CJ!K6Mje7hg0更为复杂的限制。与规则不同,触发器可以引用列或数据库对
p^"E.kO8t ?+h8Ub0象。例如,触发器可回退任何企图吃进超过自己保证金的期货。51Testing软件测试网:z2u}gBB;Z(z
# 提供可变的缺省值。51Testing软件测试网4sh t3bi
* 实现复杂的非标准的数据库相关完整性规则。触发器可以对数
0M(aY@$w0据库中相关的表进行连环更新。例如,在auths表author_code列上的51Testing软件测试网D/ox*L s
删除触发器可导致相应删除在其它表中的与之匹配的行。
4q&m0Tl!l#HU m;q0# 在修改或删除时级联修改或删除其它表中的与之匹配的行。51Testing软件测试网m'o9]8J.L0ny
# 在修改或删除时把其它表中的与之匹配的行设成NULL值。51Testing软件测试网2bG!^n@p
# 在修改或删除时把其它表中的与之匹配的行级联设成缺省值。51Testing软件测试网VTkF} T
# 触发器能够拒绝或回退那些破坏相关完整性的变化,取消试
;h-d [0i0s Zr0图进行数据更新的事务。当插入一个与其主健不匹配的外部键51Testing软件测试网C*E&r4S$`m|
时,这种触发器会起作用。例如,可以在books.author_code
9D8fHeWqa+Y,h0列上生成一个插入触发器,如果新值与auths.author_code列51Testing软件测试网ae$g V4q4v
中的某值不匹配时,插入被回退。
#n/Uo(n y0* 同步实时地复制表中的数据。51Testing软件测试网:c)V `Mp;J.M
* 自动计算数据值,如果数据的值达到了一定的要求,则进行特51Testing软件测试网DY+DH nyI){B,w
定的处理。例如,如果公司的帐号上的资金低于5万元则立即给财务人51Testing软件测试网 a%O"f?'[
员发送警告数据。51Testing软件测试网m*u?n;O(K
ORACLE与SYBASE数据库的触发器有一定的区别,下面将分别讲述
]l`'Y(r?0这两种数据库触发器的作用和写法。51Testing软件测试网#m)]]2O Ix
二 ORACLE 触发器51Testing软件测试网L'W;[3Fh9y
ORACLE产生数据库触发器的语法为:51Testing软件测试网 whs`6w3_%mHRA\
create [or replace] trigger 触发器名 触发时间 触发事件51Testing软件测试网 Qo[A,Y0[ pM2h7Rr.L
on 表名51Testing软件测试网 hv"F X!G'@8W^ H8k
[for each row]51Testing软件测试网k/XtR-G)hs8N{9u
pl/sql 语句
b8@U*c#Hg+n0其中:51Testing软件测试网P8OW`1e:J?K8j
触发器名:触发器对象的名称。由于触发器是数据库自动执行
-uH}n kIe8_0的,因此该名称只是一个名称,没有实质的用途。51Testing软件测试网.my%Y}(i dFm-T|h
触发时间:指明触发器何时执行,该值可取:51Testing软件测试网c)O%Y@sx#Y?D
before---表示在数据库动作之前触发器执行;51Testing软件测试网 \^#gj'G
after---表示在数据库动作之后出发器执行。
-pjX H"h'H-w@Ge0触发事件:指明哪些数据库动作会触发此触发器:
4a)a(I{t&I0insert:数据库插入会触发此触发器;
x'Uy;c+y/iE0update:数据库修改会触发此触发器;51Testing软件测试网\!a$yf$e;O1t;{BY
delete:数据库删除会触发此触发器。51Testing软件测试网D3e@ aq2x }a%x jW
表 名:数据库触发器所在的表。51Testing软件测试网0My;Z(b*h1Z
for each row:对表的每一行触发器执行一次。如果没有这一51Testing软件测试网4z T,Z%])\ v[}
选项,则只对整个表执行一次。51Testing软件测试网^,Tu@V4?sXE
举例:下面的触发器在更新表auths之前触发,目的是不允许在51Testing软件测试网]"E;N,mN!sk
周末修改表:51Testing软件测试网(}t1OIid
create trigger auth_secure51Testing软件测试网7FKAw+}4w0p4P)K
before insert or update or delete //对整表更新前触发
Pc)N,Xf*DC/l0on auths
_7~f,F3CQzg0begin51Testing软件测试网"u/GGM&K:A
if(to_char(sysdate,'DY')='SUN'51Testing软件测试网R8g V0F4yP.M
RAISE_APPLICATION_ERROR(-20600,'不能在周末修改表auths');
0T&K