《2022年数据库原及其应用实验.pdf》由会员分享,可在线阅读,更多相关《2022年数据库原及其应用实验.pdf(21页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、数据库原及其应用实验(作业 ) 实验 1、数据定义1.1 实验目的熟悉 SQL 的数据定义语言 ,能够熟练地使用 SQL语句来创建与更改基本表,创建与取消索引。1.2 实验内容用企业管理器创建数据库University_Mis 使用 CREATE 语句创建基本表。更改基本表的定义 : 增加列,删除列 ,修改列的数据类型。创建表的升、降序索引。删除基本表的约束、基本表的索引或基本表。1.3 实验步骤(1) 用企业管理器创建数据库University_Mis (2) 在查询分析器中用SQL 语句创建关系数据库基本表: 学生表 Students(Sno,Sname, Semail,Scredit,S
2、room); 教师表 Teachers(Tno,Tname,Temail,Tsalary); 课程表 Courses(Cno,Cname,Ccredit); 成绩表 Reports(Sno,Tno,Cno, Score); 其中:Sno、Tno、Cno分别就是表 Students 、表 Teachers 、表 Courses的主键 ,具有唯一性约束 ,Scredit具有约束“大于等于0”; Reports中的 Sno,Tno,Cno就是外键,它们共同组成 Reports的主键。(3) 更改表 Students:增加属性 Ssex(类型就是 CHAR, 长度为 2),取消 Scredit “大于
3、等于 0” 约束。 把表 Courses 中的属性 Cname 的数据类型改成长度为30。(4) 删除表 Students 的一个属性 Sroom。(5) 删除表 Reports。(6) 为 Courses 表创建按 Cno 降序排列的索引。(7) 为 Students表创建按 Sno升序排列的索引。(8) 创建表 Students的按 Sname升序排列的唯一性索引。(9) 删除 Students表 Sno 的升序索引。精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 1 页,共 21 页 - - - -
4、 - - - - - - 数据库原及其应用实验(作业 ) 实验 2、SQL的数据查询2.1 实验目的熟悉 SQL 语句的数据查询语言 ,能够 SQL 语句对数据库进行单表查询、 连接查询、嵌套查询、集合查询与统计查询。2.2 实验内容实验内容主要就是对数据库进行查询操作,包括如下四类查询方式 : (1) 单表查询查询的目标表达式为所有列、指定的列或指定的列的运算三种不同。使用 DISTINCT 保留字消除重复行。对查询结果排序与分组。集合分组使用集函数进行各项统计。(2) 连接查询笛卡儿连接与等值连接。自连接。外连接复合条件连接。多表连接。(3) 嵌套查询通过实验验证对子查询的两个限制条件。体
5、会相关子查询与不相关子查询的不同。考察四类谓词的用法 ,包括: 第一类 ,IN、NOT IN; 第二类 ,带有比较运算符的子查询 ; 第三类 ,SOME、ANY 或 ALL 谓词的子查询 ,查询最大值与最小值 ; 第四类 ,带有 EXISTS 谓词的子查询 ,实现“所有”等情况 (如王宏的“所有”课程 ,“所有”女生选修的课程) (4) 集合运算使用保留字 UNION 进行集合或运算。采用逻辑运算符 AND 或 OR 来实现集合交与减运算。2.3 实验步骤以 University_Mis 数据库为例 ,该数据库中有四张如实验1,其中 Score就是每门课的考试成绩,Scredit 就是学生所有
6、考试合格课程所获得的积分总数,Ccredit 每门课程的学分数。在数据库中 ,存在这样的联系 :学生可以选择课程 ,一个课程对应一个教师。 在表Reports中保存学生的选课记录与考试成绩。请先输入如下符合条件的元组后,再对数据库进行有关的查询操作: 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 2 页,共 21 页 - - - - - - - - - - 数据库原及其应用实验(作业 ) 图 1、1、Students 表图 1、2、Teachers表图 1、3、Courses 表图 1、4、Report
7、s 表(1) 查询性别为“男”的所有学生的名称并按学号升序排列。SELECTSnameFROM Students WHERE Ssex= 男 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 3 页,共 21 页 - - - - - - - - - - 数据库原及其应用实验(作业 ) ORDER BY SnoASC; (2) 查询学生的选课成绩合格的课程成绩,并把成绩换算为积分。 积分的计算公式为 :1+(考试成绩 -60)*0、1*Ccredit 。考试成绩 =60 否则=0SELECTSno , Sco
8、re, Credits,( 1+( Score- 60 )* 0、1)* CreditsscoreFROM Reports, Courses WHERE Score= 60 (3) 查询学分就是 3 或 4 的课程的名称。SELECTCname FROM Courses WHERE Credits= 3 OR Credits= 4 ;(4) 查询所有课程名称中含有“算法”的课程编号。SELECTCno FROM Courses WHERE CnameLIKE% 算法 % ;(5) 查询所有选课记录的课程号(不重复显示 )。SELECTCno FROM Reports WHERE Score!=
9、 0 GROUP BY Cno(6) 统计所有老师的平均工资。SELECTAVG( Tsalary) FROM Teachers (7) 查询所有教师的编号及选修其课程的学生的平均成绩,按平均成绩降序排列。SELECTTno , AVG( Score) FROM Reports GROUP BY Tno ORDER BY AVG( Score)DESC (8) 统计各个课程的选课人数与平均成绩。SELECTCno , COUNT( Sno )number , AVG( Score) FROM Reports GROUP BY Cno (9) 查询至少选修了三门课程的学生编号与姓名。SELECT
10、Sno , Sname FROM Students WhereSnoIN ( SELECTSno FROM Reports GROUP BY Sno HAVINGCOUNT(*)=3 ) (10)查询编号 S26 的学生所选的全部课程的课程名与成绩。SELECTSno , Score, Cname 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 4 页,共 21 页 - - - - - - - - - - 数据库原及其应用实验(作业 ) FROM Reports, Courses WhereSnoLIKE
11、S26AND Courses、 Cno=Reports、Cno(11)查询所有选了“数据库原理及其应用”课程的学生编号与姓名。SELECTStudents、Sno , Sname FROM Courses, Students, Reports WhereCname LIKE 数据库原理与其应用%AND Courses、Cno = Reports、CnoAND Reports、Sno= Students、Sno(12)求出选择了同一个课程的学生对 。SELECTA、Cno , A、Sno , B、Sno FROM ReportsA ,ReportsB WhereA、Cno= B、CnoAND A
12、、Sno!=B、Sno ORDER BY Cno(13)求出至少被两名学生选修的课程编号。(14)查询选修了编号S26 的学生所选的某个课程的学生编号。(15)查询学生的基本信息及选修课程编号与成绩。(16)查询学号 S52的学生的姓名与选修的课程名称及成绩。(17)查询与学号 S52的学生同 性别 的所有学生资料。(18)查询所有选课的学生的详细信息。(19)查询没有学生选的课程的编号与名称。(20)查询选修了课程名为C+的学生学号与姓名。(21)找出选修课程 UML 或者课程 C+的学生学号与姓名。(22)找出与课程 UML 或课程 C+的学分一样课程名称。(23)查询所有选修编号C01
13、的课程的学生的姓名。(24)查询选修了所有课程的学生姓名。(25)利用集合 查询方式 ,查询选修课程C+或选择课程JAVA 的学生的编号、姓名与积分。(26)实现集合交运算 ,查询既选修课程C+又选修课程JAVA 的学生的编号、姓名与积分。(27)实现集合减运算 ,查询选修课程 C+而没有选修课程JAVA 的学生的编号。实验 3、数据更新3.1 实验目的熟悉数据库的数据更新操作,能够使用 SQL 语句对数据库进行数据的插入、更新、删除操作。3.2 实验内容在本实验中 ,主要内容就是如何用SQL 语句对数据进行更新。使用 INSERT INTO 语句插入数据 ,包括插入一个元组或将子查询的结果插
14、入到数据库中两种方式。使用 SELECT INTO 语句 ,产生一个新表并插入数据。使用 UPDATE 语句可以修改指定表中满足WHERE 子句条件的元组 ,有三种精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 5 页,共 21 页 - - - - - - - - - - 数据库原及其应用实验(作业 ) 修改的方式 :修改某一个元组的值;修改多个元组的值;带子查询地修改语句。使用 DELETE 语句删除数据 :删除某一个元组的值 ;删除多个元组的值 ;带子查询地删除语句。3.3 实验步骤在数据库 Univ
15、ersity_Mis 上按下列要求进行数据更新。(1) 使 用SQL 语 句 向Students 表 中 插 入 元 组 (Sno:S78; Sname: 李 迪 ; Semail:LDzjut 、edu、cn; Scredit:0;Ssex:男)。(2) 对每个课程 ,求学生的选课人数与学生的平均成绩,并把结果存入数据库。使用 SELECT INTO 与 INSERT INTO 两种方法实现。(3) 在 Students 表中使用 SQL 语句将姓名为李迪的学生的学号改为 S70。(4) 在 Teachers表中使用 SQL 语句将所有教师的工资加500 元。(5) 将姓名为 刘华的学生的课
16、程“数据库原理及其应用”的成绩加上6 分。(6) 在 Students表中使用 SQL 语句删除姓名为 李迪的学生信息。(7) 删除所有选修课程JAVA 的选修课记录。(8) 对 Courses 表做删去学分 =4 的元组操作 ,讨论该操作所受到的约束。实验 4、SQL的视图4.1 实验目的熟悉 SQL 支持的有关视图的操作 ,能够熟练使用SQL 语句来创建需要的视图 ,对视图进行查询与取消视图。4.2 实验内容(1) 定义常见的视图形式 ,包括: 行列子集视图WITH CHECK OPTION 的视图基于多个基表的视图基于视图的视图带表达式的视图分组视图(2) 通过实验考察 WITH CHE
17、CK OPTION 这一语句在视图定义后产生的影响,包括对修改操作、删除操作、插入操作的影响。(3) 讨论视图的数据更新情况 ,对子行列视图进行数据更新。(4) 使用 DROP 语句删除一个视图 ,由该视图导出的其她视图定义仍在数据字典中 ,但已不能使用 ,必须显式删除。同样的原因 ,删除基表时 ,由该基表导出的所有视图定义都必须显式删除。4.3 实验步骤(1) 创建一个行列子集视图CS_View,给出选课成绩合格的学生的编号、 教师编号、所选课程号与该课程成绩。(2) 创建基于多个基本表的视图SCT_View ,这个视图由学生姓名与她所选修的课程名及讲授该课程的教师姓名构成。精品资料 - -
18、 - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 6 页,共 21 页 - - - - - - - - - - 数据库原及其应用实验(作业 ) (3) 创建带表达式的视图EXP_View, 由学生姓名及所选课程名与所有课程成绩都比原来多 5 分这几个属性组成 。(4) 创建分组视图 Group_View, 将学生的学号及她的平均成绩定义为一个视图。(5) 创建一个基于视图的视图,基于 (1)中建立的视图 ,定义一个包括学生编号、学生所选课程数目与平均成绩的视图VV_View 。(6) 查询所有 选修课程“数据库原理及其应用
19、”的学生姓名。(7) 插入元组 (S52,T02,C02,59)到视图 CS_View 中。若就是在视图的定义中存在 WITH CHECK OPTION字句对插入操作由什么影响。(8) 将视图 CS_View(包括定义 WITH CHECK OPTION) 中,所有课程编号为 C01 的课程的成绩都减去5 分。这个操作数据库就是否会正确执行,为什么?如果加上5 分(原来 95 分以上的不变 )呢?(9) 在视图 CS_View(包括定义 WITH CHECK OPTION) 删除编号 S03学生的记录,会产生什么结果?(10)取消视图 SCT_View 与视图 CS_View 实验 5、数据控
20、制5、1 实验目的熟悉 SQL 的数据控制功能 ,能够使用 SQL 语句来向用户授予与收回权限。5、2 实验内容(1)使用 GRANT 语句来对用户授权 ,对单个用户或多个用户授权,或使用保留字 PUBLIC 对所有用户授权。对不同的操作对象包括数据库、视图、基本表等进行不同权限的授权。(2)使用 WITH GRANT OPTION 字句授予用户传播该权限的权利。(3)当在授权时发生循环授权 ,考察 DBS 能否发现这个错误。如果不能,结合取消权限操作 ,查瞧 DBS 对循环授权的控制。(4)使用 REVOKE 子句收回授权 ,取消授权的级联反应。5、3 实验步骤用企业管理器在数据库Unive
21、rsity_Mis 中建立三个用户USER1、USER2 与USER3,她们在数据库中的角色就是PUBLIC 。请按以下要求 ,分别以管理员身份或这三个用户的身份登陆到数据库中,进行操作 ,并记录操作结果。配置管理器服务第一个重新启动(1) 授予所有用户对表Courses 的查询权限。这就是以 windows 登录 SQL: GRANT SELECT ON Courses TO PUBLIC以 USER1 的身份登陆查询分析器,用 SQL 语言查询 Courses 与 Students表,查询结果如何?SELECT* FROM Courses 精品资料 - - - 欢迎下载 - - - - -
22、 - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 7 页,共 21 页 - - - - - - - - - - 数据库原及其应用实验(作业 ) 查询 Courses正常 , 查询表 Stuents出错 , 由于为将表Students的查询权限授予用户USER1、(2)授予用户 USER1 对表 Students插入与更新的权限 ,但不授予删除权限 ,并且授予用户 USER1 传播这两个权限的权利。GRANT SELECT,INSERT , UPDATE ON Students TO USER1 WITHGRANT OPTION (若不授予用户 USER1
23、SELECT 权限登录时将无法UPDATE) 以 USER?的身。 。 。INSERT INTOStudents VALUES( S05, 葛晓凡 , GXFzjut、 edu 、cn, 18 、6, 女 ) UPDATE Students SET Scredit= 19 、2 WHERE Sno=S05(3)允许用户 USER2 在表 Reports 中插入元组 ,更新 Score 列,可以查询除了Sno以外的所有列。GRANT INSERT , UPDATE( Score), SELECT ( Tno , Cno , Score) ON Reports TO USER2以 USER?的身。
24、 。 。INSERT INTOReports VALUES( S05, T02, C01, 85 ) UPDATEReports SETScore= 90 WHERE Tno= T01 SELECTTno , Cno , Score FROM Reports (4)用户 USER1 授予用户 USER2 对表 Students 插入与更新的权限 ,并且授予用户 USER2 传播插入操作的权利。GRANT SELECT,INSERT , UPDATE 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 8 页,
25、共 21 页 - - - - - - - - - - 数据库原及其应用实验(作业 ) ON Students TO USER2 (传播插入操作不会 ) 以 USER?的身。 。 。INSERT INTOStudents VALUES( S06, 陈慧 , CHzjut、edu 、cn, 19 、6, 女 ) UPDATEStudents SETScredit= 20 、1 WHERE Sno= S06 (5)收回对用户 USER1 对表 Courses查询权限的授权。REVOKE SELECT ON Courses FROM USER1以 USER?的身。 。 。明明收回权限为什么还可以查询?
26、(6)由上面(2)与(4)的授权 ,再由用户 USER2 对用户 USER3 授予表 Students 插入与更新的权限 ,并且授予用户USER3 传播插入操作的权力。这时候,如果由 USER3 对 USER1 授予表 Students 的插入与更新权限就是否能得到成功?如果能够成功,那么如果有用户USER2 取消USER3 的权限 ,对USER1 会有什么影响?如果再由DBA 取消 USER1 的权限 ,对 USER2 有什么影响?实验 6、SQL的空值与空集处理6.1 实验目的认识 NULL值在数据库中的特殊含义,了解空值与空集对于数据库的数据查询操作 ,特别就是空值在条件表达式中与其她的
27、算术运算符或者逻辑运算符的运算中,空集作为嵌套查询的子查询的返回结果时候的特殊性,能够熟练使用SQL 语句来进行与空值 ,空集相关的操作。6.2 实验内容通过实验验证在原理解析中分析过的SQL Server对 NULL 的处理 ,包括 : 在查询的目标表达式中包含空值的运算。在查询条件中空值与比较运算符的运算结果。使用 IS NULL 或 IS NOT NULL 来判断元组该列就是否为空值。对存在取空值的列按值进行ORDER BY 排序。使用保留字 DISTINCT 对空值的处理 ,区分数据库的多中取值与现实中的多种取值的不同。使用 GROUP BY 对存在取空值的属性值进行分组。结合分组考察
28、空值对各个集合函数的影响,特别注意对COUNT(*) 与COUNT(列名)的不同影响。考察结果集就是空集时 ,各个集函数的处理情况。精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 9 页,共 21 页 - - - - - - - - - - 数据库原及其应用实验(作业 ) 验证嵌套查询中返回空集的情况下与各个谓词的运算结果。进行与空值有关的等值连接运算。6.3 实验步骤(1) 查询所有选课记录的成绩并将它换算为五分制(满分为 5 分,合格为 3 分),注意,创建表时允许 Score取 NULL 值。(2)
29、 通过查询选修编号C07 的课程的学生的人数 ,其中成绩合格的学生人数,不合格的人数 ,讨论 NULL 值的特殊含义。(3) 通过实验检验在使用ORDER BY 进行排序时 ,取 NULL 的项就是否出现在结果中?如果有 ,在什么位置?(4) 在上面的查询的过程中如果加上保留字DISTINCT会有什么效果呢?(5) 通过实验说明使用分组GROUP BY 对取值为 NULL 的项的处理。(6) 结合分组 ,使用集合函数求每个同学的平均分、总的选课记录、最高成绩、最低成绩与总成绩。(7) 查询成绩小于 0 的选课记录 ,统计总数、平均分、最大值与最小值。(8) 采用嵌套查询的方式 ,利用比较运算符
30、与谓词ALL 的结合来查询表Courses中最少的学分。假设数据库中只有一个记录的时候,使用前面的方法会得到什么结果 ,为什么?(9) 创建一个学生表S(No,Sno,Sname),教师表 T(No,Tno,Tname) 作为实验用的表。其中 ,No 分别就是这两个表的主键,其她键允许为空 。(10) 向 S 插入元组 (n1,S01,李迪 )、(n2,S02,李岚)、(n3,S05,NULL) 、(n4,S04,关红); (11) 向T插 入 元 组 (n1,T09, 李 迪 ) 、 (n2,T08, 李 兰 ) 、 (n3,T01,NULL) 、(n4,T02,NULL) 。(12) 对这
31、两个表作对姓名的等值连接运算,找出既就是老师又就是学生的人员的学生编号与教师编号 。实验 7、实体完整性7、1 试验目的学习实体完整性的建立 ,以及实践违反实体完整性的结果。7、2 试验内容(1) 在数据库 University_Mis 中建立表Stu_Union,进行主键约束 ,在没有违反实体完整性的前提下插入并更新一条记录。(2) 演示违反实体完整性的插入操作。(3) 演示违反实体完整性的更新操作。(4) 演示事务的处理 ,包括事务的建立、处理以及出错时的事务回滚。(5) 通过建立University_Misarship 表,插入数据 ,演示当与现有的数据环境不等时,无法建立实体完整性以及
32、参照完整性。7、3 实验步骤以系统管理员或sa 用户登录进入查询分析器,在查询分析器窗口中输入如下命令,运行并观察与记录结果。精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 10 页,共 21 页 - - - - - - - - - - 数据库原及其应用实验(作业 ) (1) 在查询分析器中输入如下SQL 语句: USE University_Mis CREATE TABLEStu_Union( SnoCHAR( 8)NOT NULLUNIQUE, SnameCHAR( 8), SsexCHAR( 1),
33、 SageINT , SdeptCHAR( 20 ), CONSTRAINTPK_Stu_UnionPRIMARYKEY( Sno ); INSERTStu_UnionVALUES( S01, 王兵 , M, 23 , CS); UPDATE Stu_UnionSETSno =WHERE Sdept=CS; UPDATE Stu_UnionSETSno =S02WHERE Sname = 王兵 ; SELECT*FROM Stu_union;(2) 在查询分析器中输入如下SQL 语句: USE University_Mis INSERTStu_UnionVALUES ( S02, 黄山 , M
34、, 23 , CS); 消息2627, 级别14, 状态1, 第2 行违反了PRIMARY KEY 约束PK_Stu_Union。不能在对象 dbo 、Stu_Union 中插入重复键。(3) 在查询分析器中输入如下SQL 语句: USE University_Mis UPDATE Stu_UnionSETSno=NULLWHERE Sno =S02; 不能将值 NULL 插入列Sno,表University_Mis、dbo 、Stu_Union;列不允许有 Null 值。UPDATE 失败。(4) 在查询分析器中输入如下SQL 语句: USE University_Mis SET XACT_
35、ABORTON BEGINTRANSACTIONT1 INSERTINTOStu_unionVALUES( S09, 李永 , M, 25 , EE); INSERTINTOStu_unionVALUES ( S03, 黄浩 , F, 25 , EE); INSERTINTOStu_unionVALUES ( S05, 黄浩 , F, 25 , EE); SELECT*FROM Stu_union; COMMIT TRANSACTIONT1 在查询分析器中输入如下SQL 语句: USE University_Mis SETXACT_ABORTON BEGINTRANSACTIONT2 INSE
36、RTINTOStu_unionVALUES ( S07, 李宁 , M, 25 , EE); SELECT*FROM Stu_union; INSERTINTOStu_unionVALUES ( S09, 李靖 , F, 22 , CS); COMMIT TRANSACTIONT2 消息2627, 级别14, 状态1, 第6 行违反了PRIMARY KEY 约束PK_Stu_Union。不能在对象 dbo 、Stu_Union 中插入重复键。 在查询分析器中输入如下SQL 语句: USE University_Mis SELECT*FROM Stu_union; 精品资料 - - - 欢迎下载
37、 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 11 页,共 21 页 - - - - - - - - - - 数据库原及其应用实验(作业 ) (5) 在查询分析器中输入如下SQL 语句: USE University_Mis CREATE TABLEScholarship ( M_IDVARCHAR( 10 ),Stu_idCHAR( 8), R_MoneyINT ) INSERTINTOScholarshipVALUES( M01, S07, 5000 ) INSERTINTOScholarshipVALUES ( M01, S0
38、8, 8000 ) SELECT*FROM Scholarship 在查询分析器中输入如下SQL 语句: USE University_Mis ALTERTABLEScholarshipADD CONSTRAINTPK_ScholarshipPRIMARYKEY( M_ID ) 消息8111, 级别16, 状态1, 第2 行无法在表 Scholarship 中可为Null 的列上定义 PRIMARY KEY 约束。消息1750, 级别16, 状态0, 第2 行无法创建约束。请参阅前面的错误消息。 在查询分析器中输入如下SQL 语句: USE University_Mis ALTERTABLES
39、cholarshipADD CONSTRAINTFK_ScholarshipFOREIGNKEY( Stu_id)REFERENCES Students( Sno ) 消息1753, 级别16, 状态0, 第2 行列Students、Sno 的长度或小数位数与外键 FK_Scholarship 中的引用列 Scholarship、Stu_id 的长度或小数位数不同。参与构造外键关系的列必须定义为具有同一长度与小数位数。消息1750, 级别16, 状态0, 第2 行无法创建约束。请参阅前面的错误消息。实验 8、参照完整性8.1 实验目的学习建立外键 ,以及利用 FOREIGN KEY REFER
40、ENCES子句以及各种约束保证参照完整性。8.2 实验内容(1) 为演示参照完整性 ,建立表 Course,令 Cno为其主键 ,并在 Stu_Union 中插入数据。为下面的实验步骤做预先准备。(2) 建立表 SC,令 Sno与 Cno分别为参照 Stu_Union表以及 Course表的外键 ,设定为级联删除 ,并令(Sno,Cno)为其主键。在不违反参照完整性的前提下,插入数据。(3) 演示违反参照完整性的插入数据。(4) 在 Stu_Union 中删除数据 ,演示级联删除。(5) 在 Course中删除数据 ,演示级联删除。精品资料 - - - 欢迎下载 - - - - - - - -
41、 - - - 欢迎下载 名师归纳 - - - - - - - - - -第 12 页,共 21 页 - - - - - - - - - - 数据库原及其应用实验(作业 ) (6) 为了演示多重级联删除 ,建立 Stu_Card表,令 Stu_id 为参数 Stu_Union 表的外键 ,令 Card_id为其主键 ,并插入数据。(7) 为了演示多重级联删除,建立ICBC_Card 表 ,令 Stu_card_id 为参数Stu_Union 表的外键 ,令 Card_id 为其主键 ,并插入数据。(8) 通过删除 Students表中的一条记录 ,演示三个表的多重级联删除。(9) 演示事务中进行
42、多重级联删除失败的处理。修改ICBC_Card 表的外键属性,使其变为 On delete No action, 演示事务中通过删除Students表中的一条记录 ,多重级联删除失败 ,整个事务回滚到事务的初始状态。(10)演示互参考问题及其解决方法。 要建立教师授课与课程指定教师听课关系的两张表 ,规定一个教师可以授多门课,但就是每个课程只能指定一个教师去听课 ,所以要为两张表建立相互之间的参照关系。8.3 实验步骤以系统管理员或sa 账号登录查询分析器 ,在查询分析器窗体中输入如下命令,运行并观察与记录结果。(1) 在查询分析器中输入如下SQL 语句: USE University_Mis
43、 INSERTStu_UnionValues( S01, 李用 , 0, 24 , FF) SELECT*FROM Stu_Union; CREATE TABLECourse( CnoCHAR( 4)NOT NULLUNIQUE , CnameVARCHAR( 50 )NOT NULL, CpointsINT , CONSTRAINTPK PRIMARYKEY( Cno ); INSERTCourseVALUES( C01, ComputerNetworks, 2); INSERTCourseVALUES( C02, ArtificialIntelligence, 3); (2) 在查询分析器
44、中输入如下SQL 语句: USE University_Mis CREATE TableSC( SnoCHAR( 8),/列Stu_Union、Sno 的长度或小数位数与外键FK_SC_Sno 中的引用列 SC 、Sno 的长度或小数位数不同。参与构造外键关系的列必须定义为具有同一长度与小数位数。CnoCHAR( 4), ScreditINT , CONSTRAINTPK_SCPRIMARYKEY( Sno , Cno ), CONSTRAINTFK_SC_SnoFOREIGN KEY( Sno ) REFERENCES Stu_Union( Sno )ON DELETECASCADE, CO
45、NSTRAINTFK_SC_CnoFOREIGNKEY( Cno )REFERENCESCourse( Cno )ON DELETECASCADE ); INSERTINTOSC VALUES( S02, C01, 2); INSERTINTOSC VALUES ( S02, C02, 2); INSERTINTOSC VALUES ( S01, C01, 2); INSERTINTOSC VALUES ( S01, C02, 2); SELECT*FROM SC; (3) 在查询分析器中输入如下SQL 语句: 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下
46、载 名师归纳 - - - - - - - - - -第 13 页,共 21 页 - - - - - - - - - - 数据库原及其应用实验(作业 ) USE University_Mis INSERTINTOSC VALUES( S99, C99, 2); 消息547, 级别16, 状态0, 第2 行INSERT 语句与 FOREIGN KEY 约束FK_SC_Sno冲突。该冲突发生于数据库University_Mis,表dbo 、Stu_Union, column Sno。(4) 在查询分析器中输入如下SQL 语句: USE University_Mis DELETEFROM Stu_Un
47、ionWHERE Sno =S01; SELECT*FROM SC; (5) 在查询分析器中输入如下SQL 语句: USE University_Mis DELETEFROM CourseWHERE Cno =C02; SELECT*FROM SC; (6) 在查询分析器中输入如下SQL 语句: USE University_Mis CREATE TABLE Stu_Card( Card_id CHAR(14), Sno CHAR(5), Remained_money DECIMAL(10,2), Constraint PK_Stu_Card PRIMARY KEY(Card_id), Con
48、straint FK_Stu_Card_Sno FOREIGN KEY(Sno) REFERENCES Students(Sno) ON DELETE CASCADE ) INSERT INTO Stu_Card VALUES(05212567,S03,400、25); INSERT INTO Stu_Card VALUES(05212222,S02,600、50); SELECT * FROM Stu_card; (7) 在查询分析器中输入如下SQL 语句: USE University_Mis CREATE TABLEICBC_Card( Bank_idCHAR( 20 ), Stu_ca
49、rd_idCHAR( 14 ), Restored_moneyDECIMAL ( 10 , 2), constraintPK_ICBC_CardPRIMARYKEY( Bank_id), constraintFK_ICBC_Card_Stu_idFOREIGNKEY( Stu_card_id)REFERENCESStu_card( card_id)ON DELETECASCADE ) INSERTINTOICBC_CardVALUES( 9558844022312, 05212567, 15000 、1); INSERTINTOICBC_CardVALUES( 9558844023645, 0
50、5212222, 50000 、3); SELECT*FROM ICBC_Card; (8) 在查询分析器中输入如下SQL 语句: USE University_Mis ALTERTABLEReportsADD CONSTRAINTFK_Reports_StudentsFOREIGNKEY ( 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 14 页,共 21 页 - - - - - - - - - - 数据库原及其应用实验(作业 ) Sno )REFERENCESdbo、Students( Sno )O