MySQL完整性语言

时间:2021-07-11 07:38:00

文章为作者原创,未经许可,禁止转载。    -Sun Yat-sen University 冯兴伟

实验3:完整性语言

完整性语言实验包含3个实验项目,其中2个必修项目,1个选修项目。该实验的各个实验项目均为验证型实验项目。本次实验我选择的是实验3.1和实验3.3。

实验3.1 实体完整性实验

(1)实验目的

掌握实体完整性的定义和维护方法。

(2)实验内容和要求

定义实体完整性,删除实体完整性。能够写出两种方式定义实体完整性的SQL语句:创建表时定义实体完整性、创建表后定义实体完整性。设计SQL语句验证完整性约束是否起作用。

(3)实验重点和难点

实验重点:创建表时定义实体完整性。

实验难点:有多个候选码时实体完整性的定义。

1)        创建表时定义实体完整性(列级实体完整性),以创建department,dept_name为主码,定义department的实体完整性,蓝色那行定义了dept_name同时声明其为主码。

MySQL完整性语言

2)        创建表时定义实体完整性(表级实体完整性),同样以创建department,dept_name为主码,定义department的实体完整性,蓝色那行在表级层次上给出了实体完整性。

MySQL完整性语言

3)        创建表后定义实体完整性,以department为例,先创建department,不声明主码,之后在蓝色那两行在创建表后定义了department中的dept_name属性为主码。

MySQL完整性语言

4)        定义实体完整性(主码由多个属性组成),以创建classroom表为例

MySQL完整性语言

5)        有多个候选码时定义实体完整性,以创建instructor表为例,其中name,salary,dept_name和ID均为候选码,选择ID作为主码,name限制为非空,salary检查工资是否超过29000,dept_name外键引用department的主码。

MySQL完整性语言

6)        删除实体完整性,删除instructor的主码

MySQL完整性语言

删除前:

MySQL完整性语言

删除后:

MySQL完整性语言

可明显看出主码已经删除。

7)        增加两条主码相同的记录,验证实体完整性是否起作用,以department为例,插入两条主码相同的记录可以看到会违反实体完整性约束。

MySQL完整性语言

MySQL完整性语言

实验3.3 用户自定义完整性实验

(1)实验目的

掌握用户自定义完整性的定义和维护方法。

(2)实验内容和要求

针对具体应用语义,选择NULL/NOT NULL、DEFAULT,UNIQUE、CHECK等,定义属性上的约束条件。

(3)实验重点和难点

实验重点:NULL/NOT NULL, DEFAULT。

实验难点:CHECK。

1)      定义属性NULL/NOT NULL约束

定义student表上的ID和name的NOT NULL属性。

MySQL完整性语言

2)      定义属性DEFAULT约束

定义student表中的tot_cred学分缺省属性值为0,表示学生初始学分为0

MySQL完整性语言

3)      定义属性UNIQUE约束

定义nation表中name属性必须唯一的完整性约束,表示国家名字不能一样。

MySQL完整性语言

4)      使用CHECK

使用CHECK定义instructor表中salary应该满足的约束。

MySQL完整性语言

5)      插入instructor的一条记录验证是否违反NOT NULL约束

MySQL完整性语言

执行此语句会报错:

21:47:18  insert into instructor  values('66666',null,'NEW_Department',88888)

Error Code: 1048. Column 'name' cannot be null

MySQL完整性语言

故可以看到完整性约束只有在被满足时才可以进行的操作才能被允许。