《实验10:数据库完整性.docx》由会员分享,可在线阅读,更多相关《实验10:数据库完整性.docx(6页珍藏版)》请在三一办公上搜索。
1、实验10:数据完整性实验班级:计算机科学与技术2班 学号:20131602310110 姓名: 徐旸一、实验目的本实验的目的是通过实验使学生加深对数据完整性的理解,学会创建和使用 触发器。二、实验要求三、实验内容在 SQL Server Management Studio 中创建触发器1. 在SQL Server Management Studio中,由服务器开始逐步扩展到触发器 所属表的数据库(本例为学生选课数据库),打开表文件夹,在表窗口中用鼠标 右击触发器所属的表(本例为选课表)。在弹出菜单上选择“所有任务” “管理触发器”项,则弹出触发器属性对话 框。-Microsoft SQL Se
2、rver Management Studi对蠡资源*5器 X翳m心隹邕章享I丛See additional Create Trigger tenolates for more exaules of differenc Trigger statements.Tenolate generated from Tenolate Explorer using: Create Trigger (New Menu).SQLThis block of comments will not be included in the definition of the function.Use the Specify
3、Values for Ienolate Parameters connnand (Ctrl-Shift-M) to fill in the parameter values below.SQLQuery3.sql - 22T26.lenovo (51) SQLQuery2.sql - 222-26.lenovo (54)*_| B卜=坚(o),|署费 T文件心编后(E)视囹(V)查询(Q)项目(P)调试(D) IMCD窗口 (W)社区(C)帮助(H) 业赡查10(N)岳也函螯鬓 日2目 画M 埠褪labl ?执行g/日 AFTER Data_Modification_Statements, ,
4、 INSERTDELETEUPDATE;I SETGOSETGO3 !:ANSI_NULL5ON QUOTED_IDENTIFIER ONAuthor:Create date :Description: 0 222-26SQLEXPRESS (SQL Server 10.0.2531 - 222-26L U绅库国U紊统麴g库E (j labl田o数据库美素图El以表国Ci素统表国国dbo.课程国db。.选课国以列田亡i鼬国约束Q触发器田亡j索引田亡i统计信息国国dbo.学生田亡3视图田O同义词 Q可轴i性囚亡3存醐推3 Q函数做库够器囚占程序集1亡3类型目胡附加到计算机”222-上的;旺程“3
5、4 SQL 222-26功。线程 r 222-26SQLEXPRESS 51 1 (0xc4c)已退出,返回值为 (0x0) 0线裾 r 222-26SQLEXPRESS 51 (0xc4c) 已退出,返回值为 (0x0) 0庙性 P X当前映鲂瓯J日赂盹返回的行数0结束时间名称222-26SQLEXPRESS启面时间占用时间打开日快坚名称222-26SQLEXPRESS (222-2日信皂SPID51遍回的坚行数222-25lenovo服务器版本10.0.2531服务够称时间222-25SQLEXPRESS碧开时间堑占用时间JOT显小名称222-26SQLEXPRESSG* OK/S+0.D
6、4K/5名称晓的名祢。2. 创建一个insert触发器,当在选课表中插入一条新记录时,给出你已经 插入了一条新记录! ! 的提示信息。程序代码如下:create trigger stuinsert on 选课for insertasdeclare msg char(50)set msg=你已经插入了一条新记录! ! print msgMicrosoft SQL Serbsr Management Studio文件旧寤i(E)视图(V)查询(Q)项目(P)调试(D)工BCD窗口 (W)社区(C)帮.立新就|jj圈喧螯|原|曰id日|蹑;:密域11血-I ! aftpg * 口 /粉闻Uir崎|瞻
7、HSQLQuery3.sql - 222-2&.Renovo (51) SQLQueryZ.sql - 222-26V-lenovo (54)*_ 日 create trigger stuinsert on j.也i.果for insertasdeclare msg char (5Oig 枷B你已经插入了一条新记录! ! !,|-print msgT消息命令已成功完成.打开选课表,往选课表输入一条任意数据,查看结果。Microsoft SQL Server Management Studio文件(F) 幡(E)视图(V)查询项目(P)调试(D)工具窗口 (W)红新建簸iN山 圈食醴 攻 二曲g
8、 2 -:剧任| | *棚亍伽* /睹岸园|广/SQLQueryZ.sql - 222-26.lenovo (54)*IMSERT 选课 VALUES ( r 3LCCLD r , r W , W )* |rrrTji消息你已经插入了一条新记录! ! !:i行受影响)3. 在学生表上建立触发器trgl,当修改学生表中某个学生的学号时,如果 选课表中存在该学生的选修记录时,则修改该同学的学号。create trigger trgl on 学生 for updateasprint 触发器trgl开始工作declare old_id nchar(6declare new_id nchar(6sele
9、ct old_id =学号 from deletedselect new_id =学号 from inserted if UPDATE(学号 beginupdate 选课 set 学号=new_id where 学号=old_id end4.在选课表上建立触发器trg2,当插入一行数据时,如果学号(Stid)和课程号(cid)错误则取消插入操作。5.创建一个insert触发器,当在选课表中插入一条新记录时,学号和课程号 必须是已经存在,且成绩应该在0100之间。程序代码如下:create trigger scinsert on 选课for insertasdeclare gradevalue
10、realset gradevalue=(select grade from inserted)print 触发器开始工作if not exists(select 学号 from insertedwhere 学号 in(select 学号 from pupil)beginprint 无此学生的编号,请重新确认! !rollback transactionendelsebeginif not exists(select 课程 号 from inserted where 课程 号 in(select 课程号 from course)beginprint 无此课程的编号,请重新确认! ! rollba
11、ck transactionendelsebeginif gradevalue100beginprint 分数有误,请重新确认! !rollback transactionendelseprint 数据插入成功! !endend6.创建一个after触发器,在学生表中删除某学生的记录时,删除其相应的选课记录。程序代码如下:create trigger studelete on 学生for delete asdeclare stunum char(10)select stunum=学号 from deletedif not exists(select * from 学生,选课where 学生.学
12、号二选课.学号 and 学生.学号二stunum)print 无此学生的选课记录! !elsebeginprint 开始查找并删除该学生相映的选课记录delete from sc where 学号=stunumprint 该学生的选课记录已经删除! !end文件(F)编辑(E)视图(V)查询(Q)项目(P)调试(D)工具窗d(w)社区(Q蒂助(H)盘,新Qi密I汗I险 扇 净9曰 缰t也园1 | ? wt(x)二/沥回国| r削勉圈0 M皇停享鸵园222-26SQLEXPRESS.Iabl - dbo.ZSQLQuery7.sql - 222-26.lenovo (51)* Sdelete 学
13、生L WHERE 学号=3101命消息无此学生的选课记录!1行受影响)I目动附加到计算机、222-26上的进程984 SQL 222-26”成功。线程222-26SQLEXPRESS 51 (0xc4c)已退出,返回值为 0 (0x0)。线积222-26SQLEXPRESS 51 (0xc4c)已退出,返回值为 0 (0x0) #就绪属性 9 X当前连接参数聚合状态返回的行数0结束时间2015/5/18 17:24:38名称222-26SQLEXPRESS启动时间2015/5/18 17:24:38占用时间00:00:00.024打开B骅连接名称222-26SQLEXPRESS (222-2信皂SPID51麝名222-26lenovo返回的连接行数0服务器版本10.0.2531服务器名称222-26SQLEXPRESS连接结束时间2015/5/18 17:24:38连接开始时间2015/5/18 17:24:38连接占用时间00:00:00.024陞状态打开显ZF名称222-26SQLEXPRESS, 0K/S1 2.8K/S名称连接的名称。