![触发器在数据库中的应用及影响_第1页](http://file3.renrendoc.com/fileroot_temp3/2022-3/5/2f2efdfe-8d61-4b50-af99-9ad7fb049f24/2f2efdfe-8d61-4b50-af99-9ad7fb049f241.gif)
![触发器在数据库中的应用及影响_第2页](http://file3.renrendoc.com/fileroot_temp3/2022-3/5/2f2efdfe-8d61-4b50-af99-9ad7fb049f24/2f2efdfe-8d61-4b50-af99-9ad7fb049f242.gif)
![触发器在数据库中的应用及影响_第3页](http://file3.renrendoc.com/fileroot_temp3/2022-3/5/2f2efdfe-8d61-4b50-af99-9ad7fb049f24/2f2efdfe-8d61-4b50-af99-9ad7fb049f243.gif)
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、触发器在数据库中的应用及影响摘要:触发器是一个特殊的存储过程,它的执行不是有程序调用,也不是手工启动,而是由事件触发,比如对一个表进行插入、删除和更新操作时就会激发它执行。触发器经常用于加强数据的完整性约束和业务规则,本文简单介绍了触发器在数据库中的应用及其影响。关键字:触发器;数据库;存储过程一、触发器概述 触发器是SQL Server数据库应用中一个重要工具,是一种特殊类型的存储过程,应用非常广泛。一般存储过程主要通过存储过程名而被直接调用,触发器则是通过事件触发执行。触发器基于一个表来创建并和一个或多个数据修改操作(插入、更新或删除)相关联,可视作表的一部分。触发器与数据库中的表紧密相关
2、,比如当对表执行Insert、Update或Delete操作时,触发器就会自动执行。 SQL Server 包括两大类触发器:DML 触发器和 DDL 触发器。其中DDL 触发器是 SQL Server 2005 的新增功能,当服务器或数据库中发生数据定义语言 (DDL) 事件时将调用该触发器;DML 触发器是指当数据库中发生数据操作语言 (DML) 事件时被调用。DML 事件包括在指定表或视图中修改数据的 Insert、Update或 Delete 语句。DML 触发器可以查询其他表,还可以包含复杂的 Transact-SQL 语句。DML 触发器用于在数据被修改时强制执行业务规则,以及扩展
3、 Microsoft SQL Server 2005 约束、默认值和规则的完整性检查逻辑。本文中所讲述的触发器主要是指DML 触发器。 DML触发器包括三种类型:AFTER 触发器、INSTEAD OF 触发器、CLR 触发器。在执行了 Insert、Update 或 Delete 语句操作之后将会执行AFTER 触发器,本文将以AFTER触发器为例来讲述触发器在保持数据完整性中的应用。其创建语法如下: Create TRIGGER trigger_name ON table_name AFTER Insert,Update,Delete AS Sql_statements RETURN 在触
4、发器的应用中,我们通常会用到两个特殊的表:inserted表和deleted表。它们都是针对当前触发器的局部表。这两个表与触发器所在表的结构完全相同,而且总是存储在高速缓存中。当触发Delete触发器后,从受影响的表中删除的行的副本将被放置到deleted表中。同理当触发Insert触发器后,inserted表中保存的是刚被插入的数据行的一个副本。 当一个触发器执行激发另一个触发器的操作,而另一个触发器又激发第三个触发器,如此等等,这时就发生了触发器的嵌套。也就是下文中用到的嵌套触发器。DML 触发器和 DDL 触发器最多可以嵌套 32 层。 二、触发器的应用 我们以BBS论坛数据库中多个关联
5、表的操作为例,阐述触发器在保持数据完整性、一致性中的应用。 在BBS的程序设计中,我们经常会碰到对一个数据表操作的同时,还要自动对另外几个相关联的数据表进行操作,以保证各数据表之间数据的完整性与一致性。BBS论坛中常用的数据表有: BBS_User表(存储用户信息):用于存储用户信息。字段有用户名、密码、积分、发帖数、等级ID、最后一次发帖、qq、Email、头像、注册时间等; BBS_Type表:用于存储大版块信息。字段有版块ID、版块名称等; BBS_LanMu表:存储分论坛信息。字段有分论坛ID、名称、所属大版块ID、主题总数、回复总数、版主等; BBS_Topic表:存储帖子信息。字段
6、有帖子ID、标题、内容、发帖人、所属分论坛ID、回复总数、点击总数、最后一次回贴时间、回帖人等; BBS_Reply表:存储回复信息。字段有回复内容、回复人、回复的帖子ID、回复时间等。 在BBS论坛中,触发器主要应用于以下几种情况: 当用户在分论坛里发表帖子时,对BBS_Topic表进行操作,但同时要自动对分论坛表BBS_LanMu里面的论坛主题总数增1,还要更新BBS_User表给该用户增加相应的积分,当用户积分达到一定分数时,自动更新该用户的等级ID,表示该用户已经升了一个等级。 当用户回复帖子时,对BBS_Reply表操作的同时,也需要对分论坛表BBS_LanMu里的回复总数增1、对B
7、BS_Topic表的回复总数增1并更新该表里的最后回帖标题和时间,还要将BBS_User表里的该用户的发帖数增1、自动增加相应积分、更新最后发帖标题和时间等; 在论坛的后台管理中,管理员有时需要添加或者删除一个大版块。当我们要删除BBS_Type表一个大版块时,为了保证数据库各表中数据的完整性与一致性,要同时对BBS_LanMu表、BBS_Topic表、BBS_Reply表中相关联的数据记录一并删除。 三、下面将以后台管理中对论坛大版块进行删除操作时应用触发器为例来进行具体介绍。 3.1需求分析 在一个论坛中有许多个大版块,每个版块又对应多个分论坛。每个论坛又对应多个帖子,每个帖子又对应多个回
8、复信息。因此需要4个相关联的表来存储相应的信息:BBS_Type表(存储大版块信息)、BBS_LanMu表(存储分论坛信息)、BBS_Topic表(存储帖子信息)、BBS_Reply表(存储回复信息)。BBS_Type与BBS_LanMu、BBS_LanMu与BBS_Topic、BBS_Topic与BBS_Reply之间都是一对多的关系。 当我们要删除BBS_Type表一个大版块时,为了保证数据库各表中数据的完整性与一致性,需要同时对BBS_LanMu表、BBS_Topic表、BBS_Reply表中相关联的数据记录一并删除。因为这里面存在3对一对多的关系,如果在程序中或者存储过程实现,显然是很
9、困难也是不合理的。根据触发器的作用以及这4个表之间的关系,采用嵌套触发器来实现这个删除功能。为BBS_Type表、BBS_LanMu表、BBS_Topic表分别建立一个AFTER触发器,该触发器由Delete事件触发。采用嵌套触发器可以在数据库里自动完成这多个表中相关记录的删除,大大简化了业务逻辑。这样即保证了数据的完整性与一致性,又保证程序设计的合理性与方便性。 3.2创建触发器 根据需求分析,为BBS_Type表、BBS_LanMu表、BBS_Topic表分别建立AFTER触发器,该触发器由Delete事件触发。建立在这3个表之上的触发器之间是嵌套触发的关系,即BBS_Type表上的触发器
10、触发BBS_LanMu表上的触发器,BBS_LanMu表上的触发器再触发BBS_Topic表上的触发器。本文中使用的数据库为Microsoft SQL Server 2005。要让触发器能嵌套触发必须在数据库“属性”中,将“递归触发器已启用”设置为TRUE。 为BBS_Type表(存储大版块信息)建立触发器DelType。该触发器功能是删除BBS_LanMu表中属于刚删除的大版块的所有分论坛信息。 Create trigger DelType on dbo。BBS_Type after delete as begin declare typeid int select typeid=TypeI
11、D from deleted -获得要被删除的版块ID delete from dbo.BBS_LanMu where Typeid=typeid end为BBS_LanMu表(存储分论坛信息)建立触发器DelLanmu。该触发器功能是删除BBS_Topic表中属于刚删除分论坛的所有帖子信息。 Create trigger DelLanmu on dbo。BBS_LanMu AFTER Delete as BEGIN declare lmid int select lmid=LMID from deleted -获得要被删除的分论坛ID delete from dbo.BBS_Topic wh
12、ere LMID=lmid END为BBS_Topic表(存储帖子信息)建立触发器DelTopic。该触发器功能是删除BBS_Reply表中属于刚删除帖子的所有回复信息。 Create trigger DelTopic on dbo。BBS_Topic after delete as BEGIN declare tid int select tid=TID from deleted -获得要被删除的帖子ID delete from dbo.BBS_Reply where TID=tid END 执行过程 当数据操作层对数据表BBS_Type发出Delete一条记录的时候,触发器DelType被触发,此触发器将删除BBS_LanMu表中属于刚删除的大版块的所有分论坛信息。 当DelType触发器对数据表BBS_LanMu删除一条记录时,又触发BBS_LanMu表上的触发器DelLanmu,此触发器将删除BBS_Topic表中属于刚删除分论坛的所有帖子信息。 当DelLanmu触发器对数据表BBS_Topic删除一条记录时,又触发触发器DelTopic,此触发器将删除BBS_Reply表中属于刚删除帖子的所有回复信息。 至此数据库中与BBS_Type中删除记录相关联的所有记录全部删除,保证了数据库各表数据的完整性与一致性。这个过程是在数据库中自动进行的,因此速度非常快,用户
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年现场壁挂式积算器行业深度研究分析报告
- 2025年中国电机启动器市场前景预测及行业投资潜力预测报告
- 2025年度多式联运货物运输代理合同-@-1
- 2025年度新型建筑节能材料采购简易合同模板
- 2020-2025年中国新能源汽车连接器行业市场前景预测及投资战略研究报告
- 员工福利申请书
- 2025年度高速铁路桥梁钢结构运输与维护合同
- 中国探险旅游行业市场全景调研及投资规划建议报告
- 公司贷款申请书
- 2025年度酒店品牌形象设计与推广合同-@-5
- 学校保洁服务投标方案(技术标)
- 《社区工作者培训课件 新浪版》
- 教育信息化背景下的学术研究趋势
- 人教版小学数学(2024)一年级下册第五单元100以内的笔算加、减法综合素养测评 B卷(含答案)
- 2024年度体育赛事赞助合同:运动员代言与赞助权益2篇
- 智研咨询发布:2024年中国新疫苗行业市场现状、发展概况、未来前景分析报告
- 2025届西藏林芝一中高三第二次诊断性检测英语试卷含解析
- 中国传统文化非遗文化中国剪纸介绍2
- 药企销售总经理竞聘
- 开封市第一届职业技能大赛健康照护项目技术文件(国赛)
- 公路电子收费系统安装合同范本
评论
0/150
提交评论