数据库原理及应用实验报告

实验题目  实验8参照完整性

  1. 实验目的

学习建立外键,以及利用FOREIGN KEY…REFERENCES子句以及各种约束保证参照完整性。

  1. 实验内容

    1. 为演示参照完整性,建立表Course,令xn_Cno为其主键,并在xun_Stu_Union表中插入数据。为下面的实验步骤做预先准备。
    2. 建立表xun_SC,令xn_Sno和xn_Cno分别为参照xun_Stu_Union表以及Course表的外键,设定为级联删除,并令(xn_Sno,xn_Cno)为其主键。在不违反参照完整性的前提下,插入数据。
    3. 演示违反参照完整性的插入数据。
    4. 在xun_Stu_Union中删除数据,演示级联删除。
    5. 在Course中删除数据,演示级联删除。
    6. 为了演示多重级联删除,建立xun_Stu_Card表,令xn_Sno为参数xun_Students表的外键,令xn_Card_id为其主键,并插入数据。
    7. 为了演示多重级联删除,建立xun_ICBC_Card表,令xn_Stu_card_id为参数xun_Stu_Union表的外键,令xn_Card_id为其主键,并插入数据。
    8. 通过删除xun_Students表中的一条记录,演示三个表的多重级联删除。
    9. 演示事务中进行多重级联删除失败的处理。修改xun_ICBC_Card表的外键属性,使其变为On delete No action,演示事务中通过删除xun_Students表中的一条记录,多重级联删除失败,整个事务回滚到事务的初始状态。
    10. 演示互参考问题及其解决方法。要建立教师授课和课程指定教师听课关系的两张表,规定一个教师可以授多门课,但是每个课程只能指定一个教师去听课,所以要为两张表建立相互之间的参照关系。

做 “实验8参照完整性”的准备工作

1、建立xun_Stu_Union

CREATE TABLE xun_Stu_Union
(xn_Sno CHAR(8) not null primary key,
xn_Sname CHAR(8),
xn_Ssex CHAR(1),
xn_Sage INT,
xn_Sdept CHAR(20))

2、插入相应数据,结果如图1

图1

insert into xun_Stu_Union
values('S02','王兵','M','23','CS')
insert into xun_Stu_Union
values('S03','黄浩','F','25','EE')
insert into xun_Stu_Union
values('S05','黄浩','F','25','EE')
insert into xun_Stu_Union
values('S09','李永','M','25','EE')
  1. 实验步骤

以系统管理员登录到SSMS,在新建查询窗口中输入如下命令,运行并观察和记录结果。

  1. 在新建查询窗口中输入如下SQL语句:

Xuni_ University_Mis:

建立表Course,令xn_Cno为其主键,在xun_Stu_Union Values和Course插入数据:

INSERT xun_Stu_Union Values(‘S01’,‘李用’,‘0’,24,‘FF’)
SELECT * FROM xun_Stu_Union;
CREATE TABLE Course(xn_Cno CHAR(4) NOT NULL UNIQUE,xn_Cname VARCHAR(50) NOT NULL,xn_Cpoints INT,CONSTRAINT PK PRIMARY KEY(xn_Cno));
INSERT Course VALUES(‘C01’,’ComputerNetworks’,2);
INSERT Course VALUES(‘C02’,’ArtificialIntelligence’,3);
  1. 在新建查询窗口中输入如下SQL语句:
Xuni_University_Mis:CREATE TABLE xun_SC
(xn_Sno CHAR(8) ,xn_Cno CHAR(8) ,Scredit INT,
CONSTRAINT PK_SC PRIMARY KEY(xn_Sno,xn_Cno),
CONSTRAINT FK_SC_Sno FOREIGN KEY(xn_Sno) REFERENCES xun_Stu_Union (xn_Sno) ON DELETE CASCADE,
CONSTRAINT FK_SC_Cno FOREIGN KEY(xn_Cno) REFERENCES Course(xn_Cno) ON DELETE CASCADE);
INSERT INTO xun_SC VALUES('S02','C01',2);
INSERT INTO xun_SC VALUES ('S02','C02',2);
INSERT INTO xun_SC VALUES ('S01','C01',2);
INSERT INTO xun_SC VALUES ('S01','C02',2);
SELECT * FROM xun_SC;
  1. 在新建查询窗口中输入如下SQL语句:

Xuni_University_Mis:

演示违反参照完整性的插入数据:

insert into xun_SC
values('S99','C99',2)

报错:

消息 547,级别 16,状态 0,第 1 行

INSERT 语句与 FOREIGN KEY 约束"FK_SC_Sno"冲突。该冲突发生于数据库"Xuni_University_Mis",

表"dbo.xun_Stu_Union", column 'xn_Sno'。

语句已终止。

结果图2所示:


图2INSERT 失败

因为违反了参照完整性,因为xun_Stu_Union没有xn_Sno为S99的元组,而xun_Stu_Union的xn_Sno是xun_SC 的外键,所以这样插入违反了参照完整性,不可行。

  1. 在新建查询窗口中输入如下SQL语句:

Xuni_University_Mis:

xun_Stu_Union表中删除数据,演示级联删除

DELETE FROM xun_Stu_Union WHERE xn_Sno='S01'
SELECT * FROM xun_SC;

结果图3,可知xun_SC表中xn_Sno='S01'的元组也被删除。

3删除S01

  1. 在新建查询窗口中输入如下SQL语句:

Xuni_University_Mis:

在Course表中删除数据,演示级联删除。

DELETE FROM Courses WHERE xn_Cno='C02'
SELECT * FROM xun_SC;

结果如图4,可知xun_SC中xn_Cno='C02'的元组也被删除:

图4删除C02

  1. 在新建查询窗口中输入如下SQL语句:

Xuni_University_Mis:

建立表xun_Stu_Card,令xn_Card_id为主键,并插入数据,令xn_Sno作为xun_Students表的外键。

CREATE TABLE xun_Stu_Card(xn_Card_id CHAR(14),xn_Sno CHAR(8),Remained_money DECIMAL(10,2),Constraint PK_Stu_Card PRIMARY KEY(xn_Card_id),Constraint FK_Stu_Card_Sno FOREIGN KEY(xn_Sno) REFERENCES xun_Students(xn_Sno) ON DELETE CASCADE)INSERT INTO xun_Stu_Card VALUES('05212567','S03',400.25);
INSERT INTO xun_Stu_Card VALUES('05212222','S23',600.50);
SELECT * FROM xun_Stu_card;

因为xun_Students表中不存在xn_Sno=S09的元组,插入会失败,所以改成了S23

  1. 新建查询窗口中输入如下SQL语句:

Xuni_University_Mis

建立表xun_ICBC_Cardxn_Stu_card_id 作为主键,xn_Stu_card_id为xun_Stu_card的外键。


CREATE TABLE xun_ICBC_Card(xn_Bank_id CHAR(20),xn_Stu_card_id CHAR(14),xn_Restored_money DECIMAL(10,2),constraint PK_ICBC_Card PRIMARY KEY(xn_Bank_id),constraint FK_ICBC_Card_Stu_id FOREIGN KEY(xn_Stu_card_id) REFERENCES xun_Stu_card(xn_card_id) ON DELETE CASCADE
)
INSERT INTO xun_ICBC_Card VALUES('9558844022312','05212567',15000.1);
INSERT INTO xun_ICBC_Card VALUES('9558844023645','05212222',50000.3);
SELECT * FROM xun_ICBC_Card;
  1. 在新建查询窗口中输入如下SQL语句:

Xuni_ University_Mis:

删除 xun_Students 的记录,演示三个表的多重级联删除。

ALTER TABLE xun_Reports DROP [students_report];
ALTER TABLE xun_Reports ADD
CONSTRAINT [FK_Reports_Students] FOREIGN KEY([xn_Sno]) REFERENCES [dbo].[xun_Students] ([xn_Sno]) ON DELETE CASCADE;     DELETE FROM xun_Students WHERE xn_Sno='S03';
SELECT * FROM xun_Stu_card;
SELECT * FROM xun_ICBC_Card;

结果如下图,可知xun_Stu_Card 表中 xn_Sno='S03'的记录已被删除(该记录为’05212567','S03',400.25),也可知xun_ICBC_Card表中xn_Card_id =’05212567’的记录也被删除(该记录为'9558844022312','05212567',15000.1):

图5删除S03

(9)在新建查询窗口中输入如下SQL语句:

演示事务中多重级联删除失败的处理,修改xun_ICBC_Card表的外键属性,变为 ON DELETE NO ACTION。

ALTER TABLE xun_ICBC_Card
DROP CONSTRAINT FK_ICBC_Card_Stu_id;
ALTER TABLE xun_ICBC_Card
ADD CONSTRAINT FK_ICBC_Card_Stu_id FOREIGN KEY (xn_Stu_card_id)
REFERENCES xun_Stu_card(xn_Card_id) ON DELETE NO ACTION;

在新建查询窗口中输入如下SQL语句:

Begin Transaction DelDELETE FROM xun_Stu_Card WHERE xn_Card_id ='05212222';SELECT * FROM xun_Stu_card;SELECT * FROM xun_ICBC_card;Commit Transaction Del

结果如图6,可知两个表中的记录都删除失败,该条记录依然存在。

图6  05212222

错误消息弹出:

消息 547,级别 16,状态 0,第 2 行

DELETE 语句与 REFERENCE 约束"FK_ICBC_Card_Stu_id"冲突。该冲突发生于数据库"Xuni_University_Mis",表"dbo.xun_ICBC_Card", column 'xn_Stu_card_id'。

语句已终止。

在新建查询窗口中输入如下SQL语句:

Xuni_University_Mis
SELECT * FROM Stu_card;
SELECT * FROM ICBC_card;

结果如图7:

图7

  1. 在新建查询窗口中输入如下SQL语句:

演示互参考问题及其解决方案,建立xun_Listen_course表和xun_Teach_course

表。

CREATE TABLE xun_Listen_course(xn_Tno CHAR(6),xn_Tname VARCHAR(20),xn_Cno CHAR(4)CONSTRAINT PK_listen_course PRIMARY KEY(xn_Tno)CONSTRAINT FK_listen_course FOREIGN KEY(xn_Cno)REFERENCES xun_Teach_course(xn_Cno)
)CREATE TABLE xun_Teach_course(xn_Cno CHAR(4),xn_Cname VARCHAR(30),xn_Tno CHAR(6)CONSTRAINT PK_Teach_course PRIMARY KEY(xn_Cno)CONSTRAINT FK_Teach_course FOREIGN KEY(xn_Tno)REFERENCES xun_Listen_course(xn_Tno)
)

报错:

消息 1767,级别 16,状态 0,第 1 行

外键 'FK_listen_course' 引用了无效的表 'xun_Teach_course'。

消息 1750,级别 16,状态 0,第 1 行

无法创建约束或索引。请参阅前面的错误。

实验结果如图8:

图8

(11) 在新建查询窗口中输入如下SQL语句:

Xuni_University_Mis

建立表 xun_Listen_course,xn_Tno来自PK_listen_Course的外键

CREATE TABLE xun_Listen_course(xn_Tno CHAR(6),xn_Tname VARCHAR(20),xn_Cno CHAR(4)CONSTRAINT PK_listen_Course PRIMARY KEY(xn_Tno)
)

成功

(12) 在新建查询窗口中输入如下SQL语句:

Xuni_ University_Mis

CREATE TABLE xun_Teach_course(xn_Cno CHAR(4),xn_Cname VARCHAR(30),xn_Tno CHAR(6)CONSTRAINT PK_teach_course PRIMARY KEY(xn_Cno)CONSTRAINT FK_teach_course FOREIGN KEY(xn_Tno)REFERENCES xun_Listen_course(xn_Tno)
)
ALTER TABLE xun_Listen_course ADD CONSTRAINT FK_listen_course FOREIGN KEY(xn_Cno)REFERENCES xun_Teach_course(xn_Cno);

成功,如图9:

图9

  1. 实验要求

(1) 实验之前请细细阅读实验总体要求与说明指导书

(2 ) 在SQL Server 2005或2008或2014的SSMS环境中,完成以上实验(1)-(10)步所有SQL数据定义操作,并将其中粗体步骤的操作窗口剪贴到实验报告中。

8.5实验体会

1)实验反思

2)实验收获

学习力参照完整性的相关内容,加深了对于这部分知识点的认识

附录:

准备工作
CREATE TABLE xun_Stu_Union
(xn_Sno CHAR(8) not null primary key,
xn_Sname CHAR(8),
xn_Ssex CHAR(1),
xn_Sage INT,
xn_Sdept CHAR(20))insert into xun_Stu_Union
values('S02','王兵','M','23','CS')insert into xun_Stu_Union
values('S03','黄浩','F','25','EE')insert into xun_Stu_Union
values('S05','黄浩','F','25','EE')insert into xun_Stu_Union
values('S09','李永','M','25','EE')1.
INSERT xun_Stu_Union Values(‘S01’,‘李用’,‘0’,24,‘FF’)
SELECT * FROM xun_Stu_Union;
CREATE TABLE Course(xn_Cno CHAR(4) NOT NULL UNIQUE,xn_Cname VARCHAR(50) NOT NULL,xn_Cpoints INT,CONSTRAINT PK PRIMARY KEY(xn_Cno));
INSERT Course VALUES(‘C01’,’ComputerNetworks’,2);
INSERT Course VALUES(‘C02’,’ArtificialIntelligence’,3);2.
CREATE TABLE xun_SC
(xn_Sno CHAR(8) ,xn_Cno CHAR(8) ,Scredit INT,
CONSTRAINT PK_SC PRIMARY KEY(xn_Sno,xn_Cno),
CONSTRAINT FK_SC_Sno FOREIGN KEY(xn_Sno) REFERENCES xun_Stu_Union (xn_Sno) ON DELETE CASCADE,
CONSTRAINT FK_SC_Cno FOREIGN KEY(xn_Cno) REFERENCES Course(xn_Cno) ON DELETE CASCADE);
INSERT INTO xun_SC VALUES('S02','C01',2);
INSERT INTO xun_SC VALUES ('S02','C02',2);
INSERT INTO xun_SC VALUES ('S01','C01',2);
INSERT INTO xun_SC VALUES ('S01','C02',2);
SELECT * FROM xun_SC;3.
insert into xun_SC
values('S99','C99',2)消息 547,级别 16,状态 0,第 1 行
INSERT 语句与 FOREIGN KEY 约束"FK_SC_Sno"冲突。该冲突发生于数据库"Xuni_University_Mis",
表"dbo.xun_Stu_Union", column 'xn_Sno'。
语句已终止。4.
DELETE FROM xun_Stu_Union WHERE xn_Sno='S01'
SELECT * FROM xun_SC;
图5.
DELETE FROM Courses WHERE xn_Cno='C02'
SELECT * FROM xun_SC;
图6.
CREATE TABLE xun_Stu_Card(xn_Card_id CHAR(14),xn_Sno CHAR(8),Remained_money DECIMAL(10,2),Constraint PK_Stu_Card PRIMARY KEY(xn_Card_id),Constraint FK_Stu_Card_Sno FOREIGN KEY(xn_Sno) REFERENCES xun_Students(xn_Sno) ON DELETE CASCADE)INSERT INTO xun_Stu_Card VALUES('05212567','S03',400.25);
INSERT INTO xun_Stu_Card VALUES('05212222','S23',600.50);
SELECT * FROM xun_Stu_card;7.
CREATE TABLE xun_ICBC_Card(xn_Bank_id CHAR(20),xn_Stu_card_id CHAR(14),xn_Restored_money DECIMAL(10,2),constraint PK_ICBC_Card PRIMARY KEY(xn_Bank_id),constraint FK_ICBC_Card_Stu_id FOREIGN KEY(xn_Stu_card_id) REFERENCES xun_Stu_card(xn_card_id) ON DELETE CASCADE
)
INSERT INTO xun_ICBC_Card VALUES('9558844022312','05212567',15000.1);
INSERT INTO xun_ICBC_Card VALUES('9558844023645','05212222',50000.3);
SELECT * FROM xun_ICBC_Card;8.
ALTER TABLE xun_Reports DROP [students_report];
ALTER TABLE xun_Reports ADD
CONSTRAINT [FK_Reports_Students] FOREIGN KEY([xn_Sno]) REFERENCES [dbo].[xun_Students] ([xn_Sno]) ON DELETE CASCADE;     DELETE FROM xun_Students WHERE xn_Sno='S03';
SELECT * FROM xun_Stu_card;
SELECT * FROM xun_ICBC_Card;9.1ALTER TABLE xun_ICBC_Card
DROP CONSTRAINT FK_ICBC_Card_Stu_id;
ALTER TABLE xun_ICBC_Card
ADD CONSTRAINT FK_ICBC_Card_Stu_id FOREIGN KEY (xn_Stu_card_id)
REFERENCES xun_Stu_card(xn_Card_id) ON DELETE NO ACTION;9.2
Begin Transaction DelDELETE FROM xun_Stu_Card WHERE xn_Card_id ='05212222';SELECT * FROM xun_Stu_card;SELECT * FROM xun_ICBC_card;Commit Transaction Del消息 547,级别 16,状态 0,第 2 行
DELETE 语句与 REFERENCE 约束"FK_ICBC_Card_Stu_id"冲突。该冲突发生于数据库"Xuni_University_Mis",表"dbo.xun_ICBC_Card", column 'xn_Stu_card_id'。
语句已终止。(1 行受影响)(1 行受影响)SELECT * FROM xun_Stu_card;
SELECT * FROM xun_ICBC_card;10.
CREATE TABLE xun_Listen_course(xn_Tno CHAR(6),xn_Tname VARCHAR(20),xn_Cno CHAR(4)CONSTRAINT PK_listen_course PRIMARY KEY(xn_Tno)CONSTRAINT FK_listen_course FOREIGN KEY(xn_Cno)REFERENCES xun_Teach_course(xn_Cno)
)CREATE TABLE xun_Teach_course(xn_Cno CHAR(4),xn_Cname VARCHAR(30),xn_Tno CHAR(6)CONSTRAINT PK_Teach_course PRIMARY KEY(xn_Cno)CONSTRAINT FK_Teach_course FOREIGN KEY(xn_Tno)REFERENCES xun_Listen_course(xn_Tno)
)报错::
消息 1767,级别 16,状态 0,第 1 行
外键 'FK_listen_course' 引用了无效的表 'xun_Teach_course'。
消息 1750,级别 16,状态 0,第 1 行
无法创建约束或索引。请参阅前面的错误。
11.
CREATE TABLE xun_Listen_course(xn_Tno CHAR(6),xn_Tname VARCHAR(20),xn_Cno CHAR(4)CONSTRAINT PK_listen_Course PRIMARY KEY(xn_Tno)
)成功12.
CREATE TABLE xun_Teach_course(xn_Cno CHAR(4),xn_Cname VARCHAR(30),xn_Tno CHAR(6)CONSTRAINT PK_teach_course PRIMARY KEY(xn_Cno)CONSTRAINT FK_teach_course FOREIGN KEY(xn_Tno)REFERENCES xun_Listen_course(xn_Tno)
)
ALTER TABLE xun_Listen_course ADD CONSTRAINT FK_listen_course FOREIGN KEY(xn_Cno)REFERENCES xun_Teach_course(xn_Cno);、成功

数据库原理及应用实验报告-实验8-参照完整性相关推荐

  1. 数据库原理及应用实验报告-实验10-触发器

    数据库原理及应用实验报告 实验题目  实验10触发器 10.1 实验目的 通过实验使学生加深对数据完整性的理解,学会理解.创建和使用触发器. 10.2 实验内容  (用实验9的Teacher表) (1 ...

  2. 计算机基础数据库实验报告,北航计算机软件技术基础实验报告实验报告4-2——数据库应用系统的开发...

    <北航计算机软件技术基础实验报告实验报告4-2--数据库应用系统的开发>由会员分享,可在线阅读,更多相关<北航计算机软件技术基础实验报告实验报告4-2--数据库应用系统的开发(10页 ...

  3. 求数学系或计算机系姓张的学生的信息,西安财经学院信息学院实验报告实验四郑莹莹1005230303.pdf...

    西安财经学院信息学院实验报告实验四郑莹莹1005230303.pdf 西安财经学院 姓名 郑莹莹 西安财经学院 西西安安财财经经学学院院信息学院 1005230303 1005230303 学号 11 ...

  4. 苏州大学实验报告模板C语言,苏州大学实验报告-实验flash在线编程实验

    1.实验Flash在线编程实验一实验目的1进一步熟悉MT-IDE嵌入式开发系统环境.汇编.C语言.调试方式.2进一步学习SCI通信的内容.3掌握Flash存储器在线编程的基本概念.4熟悉GP32芯片F ...

  5. 计算机图学实验报告,计算机图形学实验报告实验1

    计算机图形学实验报告实验1 (9页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 9.9 积分 贵州大学实验报告学院:计算机科学与信息专业:计科班级:101 ...

  6. 空间分析与应用实验报告实验一燕麦试验田选址

    空间分析与应用实验报告 实验名称:实验一   燕麦试验田选址 ===================================================================== ...

  7. 空间分析实验报告 实验二 度假村选址

    空间分析与应用实验报告 实验名称:实验二  度假村选址 ======================================================================== ...

  8. 北京理工大学大学计算机实验报告四,北京理工大学汇编实验报告实验四.doc

    文档介绍: 本科实验报告实验名称:分支和循环实验课程名称:CPU与汇编语言和选修实验实验时间:.10.24任课教师:高平实验地点:10-102实验教师:高平实验类型:█原理验证□综合设计□自主创新学生 ...

  9. 金山学院信息与机电工程系实验报告实验2 程序流程控制

    金山学院信息与机电工程系实验报告实验2 程序流程控制 一.实验目的和要求 (1)掌握if分支结构.for循环和while循环结构的使用. (2)熟悉列表.元组.字典.集合的概念和基本用法. 二.实验内 ...

最新文章

  1. RHEL/CentOS/OEL5/6.x高危漏洞修补
  2. SSH远程管理(用户登录控制及密码验证)
  3. 福布斯2015中国非上市潜力企业100强
  4. 电销机器人价格_供应商电话销售机器人服务为先
  5. 在Data Lake Analytics中使用视图 1
  6. PAT乙级(1035 插入与归并)
  7. afc系统服务器维护,自动售检票系统AFC中央系统维护员中级业务模型.PDF
  8. Linux 中安装软件报缺少共享库文件的错误
  9. LeetCode-1-two-sum
  10. 渗透测试报告模板_演习防守方总结模板写作公式
  11. 网站推广优化教程100条(完整版)
  12. python中文名字-Python 批量生成中文姓名(百家姓)
  13. 这张图可以帮助解释为什么欧洲有些国家欢迎难民,有些国家拒绝难民【The Washington Post】
  14. JS-变量提升与暂时性死区概念
  15. 智能名片如何在会场营销落地
  16. 有哪些简单好用的国产数据库?
  17. Python 多张 Excel 合并为一张 Excel
  18. 按住Alt键加小键盘数字出现的特殊字符对照表
  19. 基于kinect的人体动作识别系统(算法和代码都放出)
  20. 记录下server的配置

热门文章

  1. Windows 日志分析
  2. EasyExcel简介
  3. 电子货架标签----哪些厂家在做?
  4. Firefox(火狐浏览器)侧边栏显示书签
  5. NOIP 过河问题 月黑风高的夜晚
  6. Kodi中AirPlay 和 DLNA 无线串流投影以及开启方法
  7. Material Design之CollapsingToolbarLayout使用
  8. 将任意的十进制整数转换成任意R进制数(R在2-16之间)
  9. 凡客诚品官方网站的前端改进建议
  10. 解决Module not found: Error: Can‘t resolve ‘sass-loader‘ in ‘******‘和node-sass和sass-loader版本不兼容问题