- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基于Trigger数据库自动更新
基于Trigger数据库自动更新
在各个领域,人们对数据的安全性提出了很高的要求,人为地传递数据已不是一个现实问题,尤其是在一个数据信息发生改变,直接影响到其他一连串的数据信息发生变化,数据库如果没有自动的更新功能实现,将无法预知数据发生变化之后的结果。
一、SQL Server数据库自动更新
SQL Server是一个高性能的客户端/服务器结构的关系数据库管理系统,它能够同多种操作系统兼容,[2]它为用户提供了一种强大的数据库管理功能。提供了数据的网络安全性和数据的自动更新。它主要应用于现代中小型数据库的开发。
在SQL Server2000中数据的更新检查,常用的方法是通过表之间的级联关系(参照关系)来实现,它主要实现主表与从表之间主码与外码的检测,是无法实现非主键的检查,更无法实现主表中非主键值发生变化导致从表中数据的自动更新。数据的更新关联,可以通过一种特殊的存储过程---触发器来实现。
二、SQL Server中trigger自动更新功能的原理
(一)trigger类型
SQL Server数据库中trigger是绑定在相应的表上的,有Insert、Delete、Update三种类型的trigger [1]。
Insert触发器是当用户向建立了Insert触发器的表上,添加记录时,自动执行的功能部分。它被触发之后,会产生一个Inserted表,自动存放被添加的记录信息。
Delete触发器是当用户删除建立了Delete触发器的表上记录信息时(不能使用TRUNCATE TABLE语句),自动执行该trigger,它被触发之后,会产生一个Deleted表,自动存放从表中被删除的记录信息。
Update触发器是当用户修改建立了Update触发器的表中记录时,自动执行的trigger。它被触发之后,会产生一个Inserted表,用来自动存放修改之后的记录,一个Deleted表,用来存放修改之前的记录。
(二)trigger对数据的自动更新过程
设想数据库中有三个表,三个表中数据相互关联,如关联表图所示。
1、表的关联关系。(1)表I中的数据直接同表II中的数据相关联,表I中的数据直接来源于表II;(2)表II中的数据直接同表III中的数据相关联,表II中的数据直接来源于表III;(3)表I中的数据同表III中数据间接关联,表I中的数据间接来源于表III。
2、表的传递关系。(1)当更新表III中的数据信息,表II中的相关记录信息发生变化;(2)当更新表II中信息,表I中相应的信息发生变化;(3)当更新表III中数据,表I、表II中相应数据信息发生变化。
3、建立trigger。为了保持表I(或表II)中数据信息与表II(或表I)中数据信息的一致性,首先在表III(或表II)上建立相应的触发器(Insert,Delete,Update),在触发器中编写相应的表III(或表II)发生变化后促使表II(或表I)中信息发生变化的操作语句序列。从而保证在表III(或表II)中数据发生变化之后,表II(或表I)中的数据信息也随着被自动更新。
三、trigger自动更新实现
(一)示例表
已知有镇表、村表和居民信息表,表结构如表1、表2和表3所示。镇表中包含镇编号、镇名、镇占地面积三个字段,村表中包含村编号、村名称、村占地面积和所属镇四个字段,居民信息表中包含住户编号、住户名、居住面积和所属村四个字段。
说明:镇表中的镇占地面积=村表中所属镇相同的村占地面积之和,村表中的村占地面积=居民信息表中所属村相同的居民占地面积之和。
(二)创建触发器
1、创建Insert触发器和Update触发器
当向居民信息表中添加记录信息,要使得村表中的村占地面积自动发生变化,而村表中占地面积发生变化,使得镇表中镇占地面积发生变化,首先给居民信息表创建Insert触发器,然后给村表创建update触发器,居民信息表Insert触发器,如代码段1所示。
create trigger jmxb on 居民信息表 for insert
as
update 村表
set 村表.村占地面积=村表.村占地面积+(select sum(inserted.居住面积) from inserted group by 所属村 )
where 村表.村编号=(select 所属村 from inserted)
go
代码段1添加记录信息触发器
当向居民信息表中添加记录信息,自动触发触发器jmxb,通过代码中的Group By 所属村将添加记录按所属村进行分组,然后通过sum(居住面积)求添加记录中
文档评论(0)