05数据库之数据完整性
(1)创建一个名为“Test_Integrity_姓名首字母缩写”的数据库。
(2)用命令方式在数据库中创建student表,course表和sc表,注意其中的约束按如下方式进行定义:ssex字段定义为表级约束,grade字段定义为列级约束,并为其定义一个约束名,其它的约束自己决定定义方式。
表结构如下:
Student(学生信息表):
码 | 列名 | 数据类型 | 宽度 | 空否 | 取值范围 | 备 注 |
---|---|---|---|---|---|---|
主码 | sno | char | 9 | N | 学号 | |
sname | char | 10 | N | UNIQUE | 姓名 | |
ssex | char | 8 | Y | 只能取‘男’或‘女’ | 性别 | |
sage | smallint | Y | 年龄 | |||
sdept | char | 10 | Y | 系名 |
Course(课程表):
码 | 列名 | 数据类型 | 宽度 | 空否 | 备 注 |
---|---|---|---|---|---|
主码 | cno | Char | 4 | N | 课程号 |
cname | Char | 20 | N | 课程名称 | |
外码 | cpno | Char | 4 | Y | 先行课号 |
ccredit | smallint | Y | 学分 |
SC(学生选课表):
码 | 列名 | 数据类型 | 宽度 | 空否 | 是否外码 | 参照关系 | 取值范围 | 备 注 |
---|---|---|---|---|---|---|---|---|
主码 | sno | Char | 9 | N | 外码 | student | 学号 | |
cno | Char | 4 | N | 外码 | course | 课程号 | ||
grade | smallint | Y | 0≤x≤100 | 成绩 |
(3)向student表插入姓名列为“李晨”,其它列为空的学生记录,查看是否能够插入成功,若不能请分析原因。
不能插入的原因是在Student表中,Sno为主键,不能为空。
(4)向student表分别插入学号相同的两个学生记录,姓名任意(不重名),若不能插入成功,请分析原因。
不能插入的原因是在Student表中,Sno为主键,不能重复。违反了约束条件。
(5)向student表分别插入学号不同,姓名相同的两个学生信息时,查看发生的情况。
第一条语句插入成功,第二条语句插入失败。在Student表中,Sname限定是唯一,因此不能插入。
(6)向student表插入信息(“01”,“刘生”,“未知”,20,“IS”),查看是否能够插入成功,若不能请分析原因。
插入失败的原因是在Student约束条件中,Ssex表级约束为‘男’或‘女’,此处为‘未知’,因此插入失败。
(7)使用Alter Table语句修改表student,增加对sage字段的check约束,使得列的值“不小于12”,输入学号为01,姓名为“刘生”的信息,当插入该学生的sage列分别为11,12时查看发生什么情况,并分析原因。
年龄11不满足约束条件,不能插入。
年龄12可以插入。
(8)修改sc表中对于grade列的约束,将其改为grade在0到150之间。
(9)向course表插入元组(“01”,“数据库”,“05”,3)时,查看是否能够正常插入,如不能请分析原因。
由于Student中的Sno的唯一性约束,Sno = 01在表中已经出现过,因此插入失败。