用Sybase触发器保护你的数据

ZDNet软件频道 时间:2002-06-10 作者:BUILDER.COM |  我要评论()
本文关键词:
日常工作的自动化往往是大型应用程序的用武之地。这种自动化使得开发者可以有时间处理更重要的事。触发器就为数据库开发者提供了自动化机制。下面我们就对Sybase触发器的概念做一番介绍。
触发器访问插入表或删除表

在触发器的执行期间它可以访问两个特殊的数据表。这些表在结构上同触发器所在表是完全一样的。它们总是被称做“插入”或者“删除”表。触发器可以访问这些表来决定发生了怎样的修改操作,但是,触发器不能修改这些表。注意,对数据表各行的更新会导致插入之后的删除操作。因此,如果记录在删除和插入表中都存在,那么触发器就知道发生了更改操作。

回滚事务和回滚触发器阻止不必要的修改

有两个命令可以回滚触发触发器的SQL语句所实施的修改称做,这两个命令是:回滚事务和回滚触发器。

回滚事务

采用回滚事务(rollback trasaction)可以防止触发触发器的修改行为,从而把所有数据变化回滚到begin事务以外并放弃其余操作。这是最经常使用的方法;它保证了所有关联最外面事务的修改或者批处理都能得以回滚。

回滚触发器

回滚触发器(Rollback Trigger)用来阻止触发触发器的修改行为。它允许其他任何事务修改或者批处理最终被提交。这种回滚方法用起来颇具技巧性,应该进行彻底的调试,原因是这样做可能造成部分修改而导致数据完整性的丧失。

我们举个例子说明以上措施:
begin tran
insert into table_a (column_a) values (“11111”)
insert into table_a (column_a) values (“22222”)
insert into table_a (column_a) values (“33333”)
commit trans
end trans


如果table_a上的插入触发器触发了回滚触发器,则其他插入不受其影响而顺序被提交。

如果table_a上的插入触发器触发回滚事务,则已经执行的插入将被回滚,余下的插入不再执行。

生成触发器列表标识和查看触发器源文本

你可以用以下的SELECT语句生成数据库中当前定义的触发器列表:
select *
from sysobjects
where type = "TR"


你可以如下所示查看触发器的源代码:
sp_helptext <trigger_name>

只要sp_hidetext没有用于加密触发器文本而且DBA没有禁用syscomments.text列的查阅功能,那么你就应该看到用来创建指定触发器的文本内容。

假如你希望知道触发器引用的表和视图你不妨采用sp_depends存储过程。
sp_depends <trigger_name>

触发器规则和防止非法修改

以下是触发器规则和限制列表。

  • 只有数据表的属主可以创建或者删除数据表上的触发器。
  • 不同于视图和存储过程,在触发器内部许可权限应用的方式是一样的,就同通常情况下的SELECT语句行为类似。这样,如果某位用户无权更新table_b而他又更新了table_a并触发了trigger_a去试图更新table_b,那么触发器将失败而且修改也不可进行。
  • 在一个触发器里你可以引用最多192个其他数据库对象,比如表、视图等等。
不允许的触发器操作

以下是触发器不被允许的规则列表:

  •         不允许任何形式的Create和Drop命令。然而,临时表可以被触发器所调用的存储过程调用。
  • 不允许修改表/数据库。
  •         Grant和Revoke都被禁用。
  • 不允许Select Into。
  •         Truncate Table被禁止。
  •         Update Statistics不允许。
  • Reconfigure不允许。
  •         不允许Load Database/Transaction。
  • Disk Init/Mirror/Reinit/Refit/Remirror/Unmirror都不允许。
触发器命名规范

优秀的程序员都知道命名规范的重要性。触发器也不例外。触发器名称只能采用最多30个字符。我的习惯是采用完整的表名再加上如表A所示的后缀。

表A

触发器类型

表面和后缀

Insert

employee_Itg

Update

employee_Utg

Delete

employee_Dtg

Update & Delete

employee_UDtg

Update & Delete & Insert

employee_UDItg

*假设表的名字是employee

触发器命名

触发器的使用并不难

触发器的问题还远远不止本文所阐述的这些。你还需要进一步地讨论有关的主题和其它这里没有提及的内容,这样才能更深入地掌握触发器设计和实现的艺术。你可以从书店中获得第三方开发的手册和Sybase文档,这些都是理解触发器作为数据库重要部分的有用资源。本篇概述应该能帮助你开始利用它们并且理解其用途。

责任编辑:炒饭

欢迎评论或投稿


百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
京公网安备:1101082134