实验六  数据库的完整性定义与检查
实验目的:
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小时内删除。