欢迎来到天天文库
浏览记录
ID:34772577
大小:198.68 KB
页数:5页
时间:2019-03-10
《数据库实验6触发器》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、实验6触发器一、实验目的1.了解触发器的基本概念和功能。2.掌握触发器的创建和使用方法。二、相关知识创建触发器的语法为:CREATETRIGGER<触发器名>ON<表名>[WITHENCRYPTION]FOR{[DELETE][,][INSERT][,][UPDATE]}[WITHAPPEND][NOTFORREPLICATION]AS其中:1)WITHENCRYPTION为加密选项。2)DELETE选项为创建DELETE触发器。DELETE触发器的作用是当对表执行DELETE操作时触发器被激活,并从指定表中删除元组
2、,同时将删除的元组放入一个特殊的逻辑表(delete表)中。触发器的动作可以检查delete表中的数据,以确定下一步该如何处理。3)INSERT选项为创建INSERT触发器。INSERT触发器在对指定表中执行插入数据操作时激活,激活后将插入表中的数据拷贝并送入一个特殊的逻辑表(inserted表)中,触发器会根据INSERT表中的值决定如何处理。4)UPDATE选项为创建UPDATE触发器。UPDATE触发器仅在对指定表中进行更新数据操作时激活。UPDATE触发器激活后把将要被更新的原数据移入delete表中再将要被更新后的新数据的
3、备份送入insert表中,UPDATE触发器对delete和inserted表进行检查,并决定如何处理。5)NOTFORREPLICATION选项说明当一个复制过程在修改一个触发器表时,与该表相关联的触发器不能被执行。触发器是一种特殊类型的存储过程,用来保证数据完整性,当对它所保护数据进行插入、修改和删除时自动激活,对改变的数据进行检查,以防止对数据进行不正确、未授权或不一致的修改。一个触发器只适用于一个表,每个表最多只能有三个触发器,它们分别是INSERT、UPDATE和DELETE触发器。触发器仅在实施数据完整性和处理业务规则时
4、使用。有关更详细的信息,感兴趣的同学可以在帮助中搜索主题。三、实验内容(一)简单触发器练习:1.用SQLServerManagementStudio创建触发器,当学生表S中有新的记录插入时,提示用户在选课表SC中加入相应的选课记录。具体步骤:1)打开SQLServerManagementStudio扩展到学生选课数据库,选择S表→触发器,右键单击,选择“新建触发器”,出现的触发器Transact-SQL语句输入窗口:CREATETRIGGERTIGGER_SONSFORINSERTASBEGINPRINT‘学生表S中有新的同学加入,
5、别忘了给他增加选课记录’END参考下图1【注意下图中表名是中文,比如“学生”,我们这里用英文S】。图1触发器Transact-SQL语句输入窗口2)在文本框中输入创建触发器的Transact-SQL语句(语句见上图),单击“检查语法”按钮进行语法的检查,检查无误后,单击“!执行”按钮。3)打开查询分析器,在顶部的下拉框中选中“学生选课”数据库,运行INSERT语句在学生表中加入一条学生记录,如:INSERTINTOSVALUES(’S012’,刘东’,’男’,’22’,’86918842’,’D2’);验证触发器,看看会出现什么结果
6、?4)创建好以后还可以在名字弹出项中选择要修改的触发器进行修改或删除。(二)绩点计算【特别注意,以下实验语句可以参考bb平台上的补充课件《T-SQL触发器实验参考资料》】绩点计算方法请参考本文档最后面。(1)课程学分绩点Grade的自动更新1)添加1列:用altertable…add…语句给选课表SC增加一个属性:课程学分绩点Grade,数据类型为numeric(4,1);altertablescaddGradenumeric(4,1)2)创建一个触发器:当学生的某一门课的成绩有变化时(update)自动修改Grade值,并进行验证
7、,采用after触发器createtriggerupd_GradeonSCafterupdateasifupdate(Score)--使用update(列)函数表示修改了某列的值beginif((selectScorefrominserted)<60)--成绩小于,绩点为updateSCsetGrade=0frominsertedwhereSC.Snum=inserted.SnumandSC.Cnum=inserted.Cnumandinserted.Scoreisnotnull--第一二个等式表示更新指定学生+课程的Grade,否
8、则所有的行都更新了elseupdateSCsetGrade=(inserted.Score*0.1-5)*C.CfreqFROMC,inserted--因为要用到学分,所以需要课程表C,注意这里from的用法whereSC.Snum=
此文档下载收益归作者所有