MySQL完整性语言

Posted 北冥有鱼,南冥有猫

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL完整性语言相关的知识,希望对你有一定的参考价值。

文章为作者原创,未经许可,禁止转载。    -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同时声明其为主码。

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

 

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

 

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

 

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

 

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

 

删除前:

 

删除后:

 

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

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

 

 

实验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属性。

 

2)      定义属性DEFAULT约束

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

 

3)      定义属性UNIQUE约束

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

 

4)      使用CHECK

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

 

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

 

执行此语句会报错:

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

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

 

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

以上是关于MySQL完整性语言的主要内容,如果未能解决你的问题,请参考以下文章

MySQL基础

MySQL基本的SELECT语句,SQL语言概述,基础和重要不冲突,完整详细可收藏

MySQL整理

MYSQL中如何选择合适的数据类型

MySQL笔记数据定义语言DDL

什么样的程度才是“熟练掌握sql” -- MySQL进阶版