实验六--数据库的完整性定义与检查-(2).doc
实验六数据库的完整性定义与检查
实验目的:
1.充分理解关系数据库中关于数据库完整性的概念。
2.掌握实体完整性的定义和检查方法。
3.掌握参照完整性的定义和检查方法。
4.掌握用户自定义完整性的定义和检查方法。
实验内容:
一、在企业管理器中定义以下数据表中各字段的完整性约束(包括实体完整性、参照完整性和用户定义完整性)。
1.Student表。记录学生基本信息。
表1-1Student表结构
列名
说明
数据类型
约束
Sno
学号
字符串,长度为7
主码
Sname
姓名
字符串,长度为10
非空
Ssex
性别
字符串,长度为2
取“男”或“女”
Sage
年龄
整数
取值15-45
Sdept
所在系
字符串,长度为20
默认为“计算机系”
CREATETABLE[dbo].[Student](
[Sno][char](9)PRIMARYKEY,
[Sname][char](8)NOTNULL,
[Ssex][char](2)CHECK(SsexIN(女,男)),
[Sage]SMALLINTCHECK(Sage=15ANDSage=45),
[Sdept][char](20)default(计算机)
)
2.Course表。记录课程信息。
表1-2Course表结构
列名
说明
数据类型
约束
Cno
课程号
字符串,长度为10
主码
Cname
课程名
字符串,长度为20
非空
Ccredit
学分
整数
取值大于0
Semester
学期
整数
取值大于0
Period
学时
整数
取值大于0
CREATETABLE[dbo].[Course](
[Cno][char](10)PRIMARYKEY,
[Cname][char](20)NOTNULL,
[Ccredit]SMALLINTCHECK(Ccredit0),
[Semester]SMALLINTCHECK(Semester0),
[Period]SMALLINTCHECK(Period0),
)
3.Sc表。记录学生选修课程的信息。
表1-3Sc表结构
列名
说明
数据类型
约束
Sno
学号
字符串,长度为7
主属性,引用Student的外码
Cno
课程号
字符串,长度为10
主属性,引用Course的外码
Grade
成绩
整数
取0-100
CREATETABLE[dbo].[SC](
[Sno][char](9)NOTNULL,
[Cno][char](10)NOTNULL,
[Grade]SMALLINTCHECK(Grade=0andGrade=100),
PRIMARYKEY(Sno,Cno),
FOREIGNKEY(Sno)REFERENCESStudent(Sno),
FOREIGNKEY(Cno)REFERENCESCourse(Cno)
)
二、在查询编辑器中,写出创建表的语句同时写出设置实体完整性、参照完整性和用户自定义完整性的语句。
三、完整性检查(在查询编辑器中输入SQL语句,执行语句后,DBMS自动进行完整性的检查)
1.实体完整性检查
(1)在STUDENT表中插入一条学生记录,其中插入的学号值为表中已存在的一个学号值,执行语句,查看结果。
insert
intostudent(sno,sname,ssex,sage,sdept)
values(0012,冯小楠,女,20,CS)
消息2627,级别14,状态1,第1行
违反了PRIMARYKEY约束PK_Student。不能在对象dbo.student中插入重复键。
语句已终止。
在SC表中插入一条学生选课记录,学号值为空或课程号值为空,执行语句,查看结果。
insert
intoSC(sno,cno,grade)
values(,002,90)
消息547,级别16,状态0,第1行
INSERT语句与FOREIGNKEY约束FK_Sc_Student冲突。该冲突发生于数据库StudentScore,表dbo.Student,columnSno。
语句已终止。
2.参照完整性检查
(1)在SC表中插入一条学生选课记录,插入的学号值为STUDENT表中没有的一个学号,或插入的课程号的值为COURSE表中没有的一个课程号。
insert
intoSC(sno,cno,grade)
values(0013,002,90)
消息547,级别16,状态0,第1行
INSERT语句与FOREIGNKEY约束FK_Sc_Student冲突。该冲突发生于数据库Studen