欢迎来到天天文库
浏览记录
ID:9482676
大小:64.50 KB
页数:9页
时间:2018-05-01
《sql触发器在保持数据库完整性中的实际应用--》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、SQL触发器在保持数据库完整性中的实际应用>> 1.触发器概述 触发器是SQLServer数据库应用中一个重要工具,是一种特殊类型的存储过程,应用非常广泛。一般存储过程主要通过存储过程名而被直接调用,触发器则是通过事件触发执行。触发器基于一个表来创建并和一个或多个数据修改操作(插入、更新或删除)相关联,可视作表的一部分。触发器与数据库中的表紧密相关,比如当对表执行insert、update或delete操作时,触发器就会自动执行。 SQLServer包括两大类触发器:DML触发器和DDL触发器。其中DDL触发器是SQLServer2005的新增功能,当服务器或数据库中发生数据定义语言(
2、DDL)事件时将调用该触发器;DML触发器是指当数据库中发生数据操作语言(DML)事件时被调用。DML事件包括在指定表或视图中修改数据的insert、update或delete语句。DML触发器可以查询其他表,还可以包含复杂的Transact-SQL语句。DML触发器用于在数据被修改时强制执行业务规则,以及扩展MicrosoftSQLServer2005约束、默认值和规则的完整性检查逻辑。本文中所讲述的触发器主要是指DML触发器。 DML触发器包括三种类型:AFTER触发器、INSTEADOF触发器、CLR触发器。在执行了insert、update或delete语句操作之后将会执行AFTE
3、R触发器,本文将以AFTER触发器为例来讲述触发器在保持数据完整性中的应用。其创建语法如下: createTRIGGERtrigger_name ONtable_name AFTER{[insert][,][update][,][delete]}} AS Sql_statements [RETURN] 在触发器的应用中,我们通常会用到两个特殊的表:inserted表和deleted表。它们都是针对当前触发器的局部表。这两个表与触发器所在表的结构完全相同,而且总是存储在高速缓存中。当触发delete触发器后,从受影响的表中删除的行的副本将被放置到deleted
4、表中。同理当触发insert触发器后,inserted表中保存的是刚被插入的数据行的一个副本。 当一个触发器执行激发另一个触发器的操作,而另一个触发器又激发第三个触发器,如此等等,这时就发生了触发器的嵌套。也就是下文中用到的嵌套触发器。DML触发器和DDL触发器最多可以嵌套32层。 2.1.触发器的应用 我们以BBS论坛数据库中多个关联表的操作为例,阐述触发器在保持数据完整性、一致性中的应用。 在BBS的程序设计中,我们经常会碰到对一个数据表操作的同时,还要自动对另外几个相关联的数据表进行操作,以保证各数据表之间数据的完整性与一致性。BBS论坛中常用的数据表有: BBS_User表
5、(存储用户信息):用于存储用户信息。字段有用户名、密码、积分、发帖数、等级ID、最后一次发帖、、Email、头像、注册时间等; BBS_Type表:用于存储大版块信息。字段有版块ID、版块名称等; BBS_LanMu表:存储分论坛信息。字段有分论坛ID、名称、所属大版块ID、主题总数、回复总数、版主等; BBS_Topic表:存储帖子信息。字段有帖子ID、标题、内容、发帖人、所属分论坛ID、回复总数、点击总数、最后一次回贴时间、回帖人等; BBS_Reply表:存储回复信息。字段有回复内容、回复人、回复的帖子ID、回复时间等。 在BBS论坛中,触发器主要应用于以下几种情况: 当用
6、户在分论坛里发表帖子时,对BBS_Topic表进行操作,但同时要自动对分论坛表BBS_LanMu里面的论坛主题总数增1,还要更新BBS_User表给该用户增加相应的积分,当用户积分达到一定分数时,自动更新该用户的等级ID,表示该用户已经升了一个等级。 当用户回复帖子时,对BBS_Reply表操作的同时,也需要对分论坛表BBS_LanMu里的回复总数增1、对BBS_Topic表的回复总数增1并更新该表里的最后回帖标题和时间,还要将BBS_User表里的该用户的发帖数增1、自动增加相应积分、更新最后发帖标题和时间等; 在论坛的后台管理中,管理员有时需要添加或者删除一个大版块。当我们要删除BB
7、S_Type表一个大版块时,为了保证数据库各表中数据的完整性与一致性,要同时对BBS_LanMu表、BBS_Topic表、BBS_Reply表中相关联的数据记录一并删除。 下面将以后台管理中对论坛大版块进行删除操作时应用触发器为例来进行具体介绍。 (1)需求分析 在一个BBS中常见的论坛结构如图Pic-1: 在一个论坛中有许多个大版块,每个版块又对应多个分论坛。每个论坛又对应多个帖子,每个帖子又对应多
此文档下载收益归作者所有