实验六 数据库的完整性定义与检查
实验目的:
1.充分理解关系数据库中关于数据库完整性的概念。
2.掌握实体完整性的定义和检查方法。
3.掌握参照完整性的定义和检查方法。
4.掌握用户自定义完整性的定义和检查方法。
实验内容:
一、在企业管理器中定义以下数据表中各字段的完整性约束(包括实体完整性、参照完整性和用户定义完整性)。
1.Student表。记录学生基本信息。
表1-1 Student 表结构
列名 | 说明 | 数据类型 | 约束 |
Sno | 学号 | 字符串,长度为7 | 主码 |
Sname | 姓名 | 字符串,长度为10 | 非空 |
Ssex | 性别 | 字符串,长度为2 | 取“男”或“女” |
Sage | 年龄 | 整数 | 取值15-45 |
Sdept | 所在系 | 字符串,长度为20 | 默认为“计算机系” |
CREATE TABLE [dbo].[Student](
[Sno] [char](9) PRIMARY KEY,
[Sname] [char](8) NOT NULL,
[Ssex] [char](2) CHECK(Ssex IN ('女','男')),
[Sage] SMALLINT CHECK (Sage>=15 AND Sage<=45),
[Sdept] [char](20) default('计算机')
)
2.Course表。记录课程信息。
表1-2 Course 表结构
列名 | 说明 | 数据类型 | 约束 |
Cno | 课程号 | 字符串,长度为10 | 主码 |
Cname | 课程名 | 字符串,长度为20 | 非空 |
Ccredit | 学分 | 整数 | 取值大于0 |
Semester | 学期 | 整数 | 取值大于0 |
Period | 学时 | 整数 | 取值大于0 |
CREATE TABLE [dbo].[Course](
[Cno] [char](10) PRIMARY KEY,
[Cname] [char](20) NOT NULL,
[Ccredit] SMALLINT CHECK(Ccredit>0),
[Semester] SMALLINT CHECK (Semester>0),
[Period] SMALLINT CHECK (Period>0),
)
3.Sc表。记录学生选修课程的信息。
表1-3 Sc 表结构
列名 | 说明 | 数据类型 | 约束 |
Sno | 学号 | 字符串,长度为7 | 主属性,引用Student的外码 |
Cno | 课程号 | 字符串,长度为10 | 主属性,引用Course的外码 |
Grade | 成绩 | 整数 | 取0-100 |
CREATE TABLE [dbo].[SC](
[Sno] [char](9) NOT NULL,
[Cno] [char](10) NOT NULL,
[Grade]SMALLINT CHECK(Grade>=0 and Grade<=100),
PRIMARY KEY (Sno,Cno),
FOREIGN KEY (Sno)REFERENCES Student(Sno),
FOREIGN KEY (Cno)REFERENCES Course(Cno)
)
二、在查询编辑器中,写出创建表的语句同时写出设置实体完整性、参照完整性和用户自定义完整性的语句。
三、完整性检查(在查询编辑器中输入SQL语句,执行语句后,DBMS自动进行完整性的
检查)
1.实体完整性检查
(1)在STUDENT表中插入一条学生记录,其中插入的学号值为表中已存在的一个学号值,执行语句,查看结果。
insert
into student (sno,sname,ssex,sage,sdept)
values ('0012','冯小楠','女','20','CS')
消息2627,级别14,状态1,第1 行
违反了PRIMARY KEY 约束'PK_Student'。不能在对象'dbo.student' 中插入重复键。
语句已终止。
(2)在SC表中插入一条学生选课记录,学号值为空或课程号值为空,执行语句,查看结
果。
insert
into SC(sno,cno,grade)
values ('','002',90)
消息547,级别16,状态0,第1 行
INSERT 语句与FOREIGN KEY 约束"FK_Sc_Student"冲突。该冲突发生于数据库"StudentScore",表"dbo.Student", column 'Sno'。
语句已终止。
2.参照完整性检查
(1)在SC表中插入一条学生选课记录,插入的学号值为STUDENT表中没有的一个学号,或插入的课程号的值为COURSE表中没有的一个课程号。
insert
into SC(sno,cno,grade)
values ('0013','002',90)
消息547,级别16,状态0,第1 行
INSERT 语句与FOREIGN KEY 约束"FK_Sc_Student"冲突。该冲突发生于数据库"StudentScore",表"dbo.Student", column 'Sno'。
语句已终止。
(2)修改STUDENT表中某一学生的学号值,该学生在SC表中有选课记录,执行语句,查看结果。
update student
set sno=0016
where sname='何楠'
消息547,级别16,状态0,第1 行
UPDATE 语句与REFERENCE 约束"FK_Sc_Student"冲突。该冲突发生于数据库"StudentScore",表"dbo.Sc", column 'Sno'。
语句已终止。
3.用户自定义完整性检查
(1)在STUDENT表中插入一条学生记录,其中插入的年龄值为50,执行语句,查看结果。
insert
into student (sno,sname,ssex,sage,sdept)
values ('0015','冯楠','女','50','CS')
消息547,级别16,状态0,第1 行
INSERT 语句与CHECK 约束"CK_Student_1"冲突。该冲突发生于数据库"StudentScore",表"dbo.Student", column 'Sage'。
语句已终止。
(2)在SC表中插入一条学生选课记录,其中插入的成绩值为120,执行语句,查看结果。
insert
into sc(sno,cno,grade)
values数据库属性的概念 ('0015','2','120')
消息547,级别16,状态0,第1 行
INSERT 语句与CHECK 约束"CK_Sc"冲突。该冲突发生于数据库"StudentScore",表"dbo.Sc", column 'Grade'。
语句已终止。
实验要求:
1. 以上完整性的定义要分别在企业管理器中和查询编辑器中完成。在查询编辑器中书写SQL语句。
2. 写实验报告,实验报告上写查询编辑器中执行的SQL语句。在完整性检查中,将执行的语句和执行的结果都写在报告中。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论