≯ 可以编写这样的触发器,当它被触发时,回退 ROLLBACK 激活它的那个修改操作 如DELETE操作 。 的修改操作 如DELETE操作 已被回退 ROLLBACK 。 3.3.3 触发器的工作原理 SQL 逻辑表,由系统来维护,不允许用户直接对这两个表进行修改,它们存放在内存中,不存 放在中.这两个表的结构总是与被该触发器作用的表的结构相同。触发器工作完成, 与该触发器相关的这两个表也被删除。 Server方 客户方 SOL 修改insert D/deleted d 表 Insert 插入新行 i:入的行 d: Delete 删去老的行 dI被删除的行I Update 插入新行 j:入的行 删去老的行 d:被删除的行 19 中去的任何新行。即由于插入或用于更新作用的新行值,在插入或更新作用表的同时,也将其副本存入inserted表中。因此,在inserted表中的行总是与该作用表中的新行相同。中删除的任何行。也就是把被作用表中要被删除或要被替换掉的旧行移到deleted表中。冈此,deleted表与被作用表不会有相同的行。≯关系,如上表中所示。 r面我们考虑一F参照完整性问题. 参照完整性 referentialintegrity 是指一个表 子表 的外键与另一个表的 父表 的主键值相匹配。
Server维护参照完整性是通过声明完整性和触发器来实现的。这两种方法在实现 SQL参照完整性上,可列表比较如下:操作情形 声明完整性 触发器插入外键值 可以 可以更新外键值 可以 可以更新主键值 不可以 可以删除外键值 不适用 可以删除主键值 不可以 可以 由此可见: ●如果在实际应用中,允许对主键值进行更新或删除操作,应该使用触发器来维护主键 和外键的依赖关系。 ·对于级联改变 级联更新或级联删除 只能用触发器来实现。 这里的级联操作实际 上是由子表和父表之间的主、外键的关联关系而导致的操作上的一种级联关系,也 就是说这种关联关系确定了对操作的规则约束,耳的是为了维护数据的完整性。3.3.4 触发器的嵌套问题3.3.4.1触发器嵌套的发生 如果~个触发器的执行,修改建有另一个触发器的表,则将激活那个表上的触发器。如下图所示:当更新A表时触发了A表上的触发器;触发器A的执行更新B表,触发了B表上的触发器B;触发器B的执行更新C表。这里触发器B被嵌套在触发器A中。 当一个触发器执行插入、删除、更新操作时,引起另一个触发器的触发,称为触发器嵌套 Nested 。 TableA T曲leB Table C ATableupdate A // B /’ Trigger Trigger 上述触发器嵌套的例子中将在我后面的论述中有引用,所以这部分的详细信息也将在后面部分给出。
3.3.4.2 触发器嵌套的情形· Server就为这个触发器创建这两个表。 表。每当触发某个触发器时,SQL· 全局变量@@nestlevel包含了当前执行的嵌套层次数 或称级次 。每当存储过程或触 发器调用其他存储过程或触发另一个触发器时,@@nestlevel的值就增加1:退出存储 过程或触发器时@@nestlevel就减去l。· Server规定至多允许嵌套16层,超过16层时事务将被作废,如果触发器在一个 SQL 无限循环圈中,将会超过嵌套层次的限定数,从而触发器将被终止,包含它的事务将 被回退。● Server允许触发器嵌套,但必要时管理员可以改变这个设定,使 根据缺省设定,SQL 用系统存储过程spconfigure将选项nested 套。· 根据缺省设定,SQL 发自己,或在一个触发器内,不允许对同一个表进行第二次数据修改。但必要时,系 置为on。允许触发器递归。这个选项的作用域为当前触发器。递归深度,即自己触发 次数也至多为16次。3.3.5 对触发器的限制和注意事项· 如果适当地设置选项,触发器可以嵌套也可以递归。· 触发器可以被存储过程执行。· 触发器可以声明局部变量。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-37192-14.html
民族生存都难以做到
平生
现在需要探讨的是对美斗争的策略
再踢你一脚