数据库自定义完整性触发器应用

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

数据库自定义完整性触发器的应用

[摘要] 本文根据触发器的原理,针对关系数据库,分析了after 触发器和instead of触发器的设计方法,并通过这两类触发器的创建和应用,实现关系数据库的自定义完整性。同时在完成关系数据库触发器的应用中指出触发器的特点和使用注意事项,以便读者更好的设计使用关系数据库触发器。

[关键词] 关系数据库触发器设计和应用

0.引言

关系数据库定义的触发器是一种特殊类型的存储过程,其在特定的表或视图上定义,当表中的数据被修改时,数据库管理系统(如sql server)会自动执行触发器。在实际应用中,有时需要根据情况的变化对表中的数据进行修改,对表中的数据进行修改的操作包括insert、delete、update操作,如果对某个表的insert、delete、update操作定义了触发器,则对该表执行这些操作时,相应的触发器就会被自动执行。使用触发器可以实现更为复杂的数据完整性约束,可以完成使用普通约束无法实现的复杂功能。

1.触发器的特点和类型

1.1 触发器的特点

触发器具有如下特点:

(1)与一个表或视图相联系。触发器在特定的表或视图上定义,这个表或视图称为触发器表或触发器视图。

(2)自动激活。如果对某个表的insert、delete、update操作定

义了相应的触发器,当对该表进行这些操作时,相应的触发器就会

被自动执行。

(3)不能直接调用。与一般的存储过程不同,触发器不能直接调用,也不能传递或接收参数。

(4)是一个事务。触发器和激活它的语句作为一个事务处理,可能从触发器中的任何位置撤消。

1.2触发器的优点

触发器具有如下优点:

(1)触发器可以强制定义比check约束更为复杂的数据完整性约束。在数据库中要实现数据的完整性约束,可以使用check约束或触发器。在check约束中,不允许引用其他表中的列来完成数据的检查工作,而触发器可以引用其他表中的列来完成数据的完整性约束。

(2)触发器可以实现数据库中多个表的级联更改。

(3)触发器可以比较数据库修改前后的数据状态,并根据其差异

采取相应的措施。对于由insert、delete、update等语句引起的数据变化,触发器可以比较数据变化的前后状态,因此用户可以在

触发器中引用由于修改所影响的记录行,并采取相应的措施。

(4)触发器可以使用自定义的错误信息。自定义的错误信息可以指示一个动作的状态,这在应用程序的实现中具有重要的实用价值。通过使用触发器,用户可以捕获破坏数据完整性的操作,并返回预先自定义或动态自定义的错误信息。

1.3 触发器的类型

触发器可以分为after触发器和instead of触发器两种。

(1)after触发器。这种类型的触发器在数据变动(insert、delete、update操作)完成以后才被触发。after触发器只能在表上定义,每个表可以创建多个after触发器。

(2)instead of触发器。这种类型的触发器在数据变动以前被触发,并取代变动数据的操作(insert、delete、update操作),即变动数据的操作并不执行,而是执行触发器定义的操作。instead of触发器可以在表或视图上定义,每个表或视图的每个insert、delete、update操作只能定义一个instead of触发器。

2.触发器的应用

2.1 inserted表和deleted表

使用触发器时,sql server提供了两个特殊的临时表:inserted

表和deleted表。这两个表保存在高速缓存中,它们与触发器表具有相同的结构。在进行insert、delete、update操作时,系统会根据操作情况来生成这两个表。用户可以使用这两个表来检查某些数据修改的效果,然后可以根据效果采取相应的措施。用户只能查看inserted表和deleted表中的数据,而不能直接对它们进行修改。inserted表:用于保存触发器表中被插入的记录。

deleted表:用于保存触发器表中被删除的记录。

执行insert操作时,插入到触发器表中的新记录同时被插入到inserted表中;执行delete操作时,从触发器表中删除的记录被插

入到deleted表中;执行update操作时,等效于从触发器表中删除一条记录,然后再插入一条新记录,因此触发器表中的原记录(被删除的记录)被插入到deleted表中,修改后的记录(新插入的记录)被插入到inserted表。

2.2after触发器

如果为表的insert、delete、update操作定义了after触发器,则在完成insert、delete、update操作后,相应的after触发器才会被激活。这种类型的触发器只能在表上定义,每个表可以创建多个after触发器。

(1)insert触发器

insert触发器的工作过程如下:

当向触发器表插入数据时,insert触发器被激活;

新数据行被插入到触发器表和临时表inserted中;

执行触发器中定义的语句。

(2)delete触发器

delete触发器的工作过程如下:

对触发器表执行delete操作时,delete触发器被激活;

删除触发器表中的记录,并将被删除记录放入临时表deleted表中;

执行触发器中定义的语句。

(3)update触发器

update触发器的工作过程如下:

对触发器表执行update操作时,update触发器被激活;

更新触发器表中的记录,并将原始记录放入临时表deleted中,将更新后的记录放入临时表inserted表中;

执行触发器中定义的语句。

2.3instead of触发器

如果为表或视图的insert、delete、update操作定义了instead of触发器,则当执行insert、delete、update语句时,相应的instead of触发器被激活,且触发器定义的操作会取代激活触发器的insert、delete、update等操作,即激活触发器的操作并不会被执行。

3.触发器使用注意事项

3.1创建和使用触发器的注意事项

(1)创建触发器的语句create trigger必须为批处理中的第一条语句,且在该批处理中,create trigger语句之后不能有其他的语句,否则sql会将这些语句作为触发器定义的一部分,因此创建触发器的语句create trigger应作为一个独立的批处理。

(2)触发器不能定义在临时表和系统表中,但是触发器可以引用

临时表。

(3)由于truncate table语句没有日志,因此truncate table语句不会激活delete触发器。

(4)create trigger语句只能在当前数据库中建立触发器,但在触发器内可以引用其他数据库中的数据库对象。

相关文档
最新文档