- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
SQL Server触发器在数据库综合性实验中应用
SQL Server触发器在数据库综合性实验中应用摘要:以“学生成绩管理系统”为例,阐述了SQL Server触发器在开发数据库应用系统时,保证数据参照完整性及级联操作方面的应用。
关键词:SQL Server;触发器;综合性实验
中图分类号:TP311文献标识码:A文章编号:1009-3044(2012)16-3773-02
Applications of SQL Server Triggers on the Comprehensive Experiment of the Database
DONG Shao-yun , LI Ping, MAO Wei, GAO Jiang-tao, ZHANG Yun-fei
(College of Computer Science Engineering,Qujing Normal University,Qujing 655011,China)
Abstract: Taking the case of“management system of student’s achievement”,describes the applications of the SQL Serve triggers in the de velopment of database application systems to ensure that referential integrity and cascade operation in the application.
Key words: SQL Server; trigger; comprehensive experiment
触发器是用户定义在表上的一类特殊的存储过程,它是开发数据库应用系统的重要技术。触发器常常用于数据库应用系统的强制业务规则和数据完整性方面,可以通过级联的方式对相关的表进行修改。[1]当在数据库的表上发生数据插入或更新操作时,SQL Server将自动执行触发器,保证表中数据的参照完整性约束。
1触发器的功能及原理
触发器在保证数据完整性方面具有如下功能:
1)可以禁止违反数据完整性的插入和更新。
2)可以通过级联方式对相关表进行更新,更新被参照表时会自动修改参照表中的数据。
根据对表中数据的更新动作,触发器可以分为更新触发器、插入触发器和删除触发器。根据触发器生效的时间,触发器可以分为INSTEAD OF触发器、AFTER触发器。
建立触发器时,可以引用SQL Server提供的deleted表和inserted表。删除数据时,deleted表中存放已经删除的值。插入数据时,inserted表中存放新插入的值。修改数据时,deleted表中存放原值,inserted表中存放修改后的值。
一个触发器与定义触发器的表、激活动作、触发动作三个部分相关。
2触发器的应用
“学生成绩管理系统”数据库中包括三张表:学生表(学号,姓名,性别,出生日期,已修学分),课程表(课程号,课程名,先修课,学分),成绩表(学号,课程号,成绩)。学生表的主码是学号,课程表的主码是课程号,成绩表的主码由学号和课程号组成。
2.1保证参照完整性
向成绩表中添加记录时,需检查学生表中是否有该学生信息,以及课程表中是否开设该门课程。若没有,则不允许插入。可以在成绩表上建立插入触发器,保证参照完整性约束。代码如下:
create trigger scinsert on成绩表instead of insert
as
If not exists(select * from inserted,学生表where inserted.学号=学生表.学号) or not exists(select * from inserted,课程表where inserted.课程号=课程表.课程号) begin
print ’无法插入信息!
rollback transaction
end
2.2级联更新数据
修改课程表的课程号时,如果该课程被学生选修,需要同时修改成绩中的课程号。可以在课程表上建立修改触发器,实现级联修改。代码如下:
create trigger courseupdate on课程表after update as
update成绩表
set课程号=(select课程号from inserted) where课程号=(select课程号from deleted)
2.3级联删除数据
从学生表中删除学生记录时,也要把成绩表中该生的选课记录删除。可以在学生表上建立删除触发器,实现级联删除。代码如下:
create trigger studelet
文档评论(0)