实训十触发器的创建和使用_第1页
实训十触发器的创建和使用_第2页
实训十触发器的创建和使用_第3页
实训十触发器的创建和使用_第4页
实训十触发器的创建和使用_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 网络数据库 实训报告日期: 2010 年 12 月 17 日 班 级: 09级计算机信息管理 学 号姓 名指导老师实训地点成绩38庄维瀚罗小平教A505实训项目名称实训十 触发器的创建和使用一、实训目的和要求1、理解触发器的作用;2、了解触发器和一般存储过程的区别;3、掌握创建、修改及删除触发器的方法;4、理解触发器执行的过程。二、实训所需仪器、设备硬件:计算机软件:操作系统Windows XP、SQL Server 2005三、实训内容(一) 简单触发器的创建和使用1、在student数据库中t_course表创建一名为myt1的AFTER触发器,要求实现以下功能:当插入一条记录后提示“已

2、插入一条新记录”,并验证此触发器。use studentgocreate trigger myt1on t_coursefor insertasdeclare msg char(30)set msg='已插入一条新记录'print msg-验证use studentgoinsert into t_course(c_number,c_name,hours,credit)values('123456','语文','70','2')go2、在student数据库中t_course表创建一名为myt2的AFTER触发器,要

3、求实现以下功能:当删除一条记录后提示“已删除一条记录”,并验证此触发器。use studentgocreate trigger myt2on t_coursefor deleteasprint '已删除一条记录'-验证use studentgodelete from t_course where c_number='123456'go3、在student数据库中t_course表创建一名为myt3的AFTER触发器,要求实现以下功能:当修改一条记录后提示“已修改一条记录”,并验证此触发器。use studentgocreate trigger myt3on t_

4、coursefor updateasprint '已修改一条记录'-验证use studentgoupdate t_course set c_name='高等语文'where c_number='10010218'go4、在student数据库中t_course表创建一名为myt4的INSTEAD OF触发器,要求实现以下功能:当删除一条记录之前提示“不能删除此表的记录!”,并验证此触发器,检查是否能删除此表的记录。USE STUDENTGOCREATE TRIGGER myt4ON T_COURSEINSTEAD OF DELETEAS PRI

5、NT 'INSTEAD OF 触发器开始执行' PRINT '不能删除此表的记录!'GO-验证USE studentGO DELETE FROM t_course WHERE c_number='10010218'GO5、删除以上创建的所有触发器。USE STUDENTGOdrop trigger myt1,myt2,myt3,myt4GO(二) 较复杂的触发器的创建和使用1、创建一个AFTER触发器,要求实现以下功能:在t_score表上创建一个插入更新类型的触发器scoreCheck,当在score字段中插入或修改考试分数后,触发该触发器,检

6、查分数是否在0至100分之间。CREATE TRIGGER TR_ScoreCheckON T_SCOREFOR INSERT, UPDATE ASIF UPDATE(SCORE)PRINT 'AFTER触发器开始执行'BEGIN DECLARE ScoreValue real SELECT ScoreValue=(SELECT SCORE FROM inserted) IF ScoreValue>100 OR ScoreValue<0 PRINT '输入的分数有误,请确认输入的考试分数!'END-验证TR_ScoreCheck触发器的功能USE s

7、tudentGO PRINT '在t_score中插入记录时触发器执行结果:'PRINT ''INSERT INTO t_scoreVALUES('0554112','10010218',-35)INSERT INTO t_scoreVALUES('0554113','100102183',152)GOPRINT '在t_score中修改记录时触发器执行结果:'PRINT ''UPDATE t_scoreSET score=115WHERE s_number='

8、;0554112'UPDATE t_scoreSET score=-65WHERE s_number='0554113'2、创建一个AFTER触发器,要求实现以下功能:在t_score表上创建一个插入更新类型的触发器scoreCheck2,当在score字段中插入或修改考试分数后,触发该触发器,检查分数是否在0至100分之间,若不在,则不能插入或修改,并给出提示。代码段如下:CREATE TRIGGER scoreCheck2 ON t_score FOR insert, update AS declare ScoreValue as int select ScoreV

9、alue =(select score from inserted) if ScoreValue <0 or ScoreValue >100 begin rollback transactionprint '数据不正确不能修改' end 验证上面创建的触发器,检查当输入的分数不在0到100之间,能否保存分数。此功能的实现是依赖代码段的黑体字标识的语句rollback transaction来实现的,其作用是回滚变动的数据。教材没有此语句。CREATE TRIGGER scoreCheck2 ON t_score FOR insert, update ASdeclar

10、e ScoreValue as intselect ScoreValue =(select score from inserted)if ScoreValue <0 or ScoreValue >100 begin-回滚变动的数据 rollback transactionprint '数据不正确不能修改'end -验证USE studentGO PRINT '在t_score中插入记录时触发器执行结果:'PRINT ''INSERT INTO t_scoreVALUES('0554114','10010218&

11、#39;,35)INSERT INTO t_scoreVALUES('0554115','100102183',52)GOPRINT '在t_score中修改记录时触发器执行结果:'PRINT ''UPDATE t_scoreSET score=115WHERE s_number='0554114'UPDATE t_scoreSET score=-65WHERE s_number='0554115'3、根据教材第4章P68创建一个检查约束,实现上述2的功能。体会触发器与检查约束功能上的相似之处。(直

12、接在控制台做)4、在student数据库中t_course表创建一名为twofield的AFTER触发器,要求实现以下功能:当在hours(学时)和credit(学分)字段插入或修改学时或学分后,触发该触发器,检查学时是否是大于0小于200的整数,并且学分是否是大于0小于10的实数,若不满足这两个条件,则不允许插入或修改,并给出提示。CREATE TRIGGER twofield ON t_course FOR insert, update ASdeclare h as int, c as real select h =(select hours from inserted) select c

13、 =(select credit from inserted)if h<0 or h>200 or c<0 or c>10 begin rollback transactionprint '数据不正确不能修改'end USE studentINSERT INTO t_course(c_number,hours,credit)VALUES('20095504',210,-35)5、根据教材第4章P68创建一个检查约束,实现上述4的功能。体会触发器与检查约束功能上的相似之处。(直接在控制台做)6、创建一个AFTER触发器,要求实现以下功能:在

14、t_student表上创建一个删除类型的触发器stu_delete,当在t_student表中删除某一条记录后,触发该触发器,在t_score表中删除与此学号对应的记录。CREATE TRIGGER TR_Stu_DeleteON T_STUDENT FOR DELETEAS PRINT '删除触发器开始执行'DECLARE StuNum char(10)PRINT '把在T_STUDENT表中删除的记录的S_NUMBER赋值给局部变量StuNum。'SELECT StuNum=S_NUMBER FROM deletedPRINT '开始查找并删除T_S

15、CORE表中的相关记录'DELETE FROM T_SCORE WHERE S_NUMBER=StuNumPRINT '删除了T_SCORE表中的学号为'+RTRIM(StuNum)+'的记录。'-验证Stu_Delete触发器的功能USE studentGO PRINT '在t_score中插入记录时触发器执行结果:'PRINT ''DELETE FROM t_student WHERE s_number='0554112'DELETE FROM t_student WHERE s_number='

16、;0554113'GO7、分析能用外键约束实现上述 6的功能吗?由此体会触发器与外键约束的不同之外处。是可以实现的。8、创建一个INSERT触发器,完成的功能是当在t_score表中插入或修改s_number列的数据时,检测t_student表中是否存在相应的s_number值,如果不存在,则不允许插入和修改,并给出相应的提示信息。CREATE TRIGGER newt ON t_score FOR INSERT AS declare t as char(10) select t =(select s_number from inserted) if t in (select s_nu

17、mber from t_student) print '已插入' else begin rollback transaction print '学生信息表中不存在该学号,所以不能插入' end -验证USE studentGO PRINT '在t_score中插入记录时触发器执行结果:'PRINT ''INSERT INTO t_scoreVALUES('0554150','10010218',-35)GO四、实训步骤(内容说明:1.大致的操作步骤;2.源代码,要标注题号)答:1、大致的步骤:【打开

18、数据库】-【打开student】-【打开表】-【在需要的表上创建触发器】-【新建触发器】-【输入代码】-【验证】2、源代码附在题目的后面了。五、总结与分析(内容说明:1.对此次实训原理的归纳;2.对此次实训过程中出现问题的分析及解决办法;3.此次实训的收获或体会等)答:1、此次实训原理的归纳:(1)理解触发器的作用;(2)了解触发器和一般存储过程的区别;(3)掌握创建、修改及删除触发器的方法;(4)理解触发器执行的过程。2、此次实训过程中出现问题的分析及解决办法:没有注意到外键约束,刚开始没有删掉,导致后面出现问题。3、此次实训的收获或体会:对于这次刚刚学习到的知识,这些只是熟悉罢了,还有待自己虚心向学,遇到的问题还需认真的去解读,牢牢地记住。六、思考题1、简述触发器与存储过程的区别。答:一般的存储过程由用户根据需要通过存储过程名称被调用调用的,而触发器主要是通过事件(执行INSERT、UPDATE或DELETE语句)进行触发而自动执行的。存储过程不依赖于某个表而单独存在,而触发器必须基于一个表或视图创建。2、简述触发器的作用。答:(1)、触发器是自动执行的。(2)、触发器可以通过数据库中的相关表进行层叠更改。(3)、触发器可以强制限制。这些限制比用CHECK约束所定义的更复杂。与CHECK约束不

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论