数据库原理与应用(SQL Server)笔记 第六章 数据完整性

Posted 晚风(●•σ )

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据库原理与应用(SQL Server)笔记 第六章 数据完整性相关的知识,希望对你有一定的参考价值。


前言

本次内容,我们主要掌握数据库的数据完整性,将从三个方面主要介绍实体完整性、参照完整性和域完整性。

一、实体完整性

实体完整性是通过主键约束唯一性约束等等来实现,即要求表中有一个主键,其值不能为空且能唯一标识相对应的记录。例如员工表Employee,EmpNo列为主键,根据每个员工的EmpNo列可以唯一确定该员工的相应行记录信息,通过EmpNo列建立主键约束实现员工表Employee的实体完整性。
在这里插入图片描述

(一)主键约束(PRIMARY KEY约束)

通过T-SQL语句进行以下操作:

1、创建表时创建主键约束

若一个表的主键由单列组成,则可定义为该列的列级约束或表级约束;若主键由两个或两个以上的列组成,则必须定义为表级约束。
(1)定义列级约束
格式如下:

(约束名称)
/*若不指定约束的名称,系统会自动生成名称*/
PRIMARY KEYCLUSTERED/NONCLUSTERE)
/*CLUSTERED/NONCLUSTERE是否为聚集索引*/

(2)定义表级约束
格式如下:

(约束名称)
/*若不指定约束的名称,系统会自动生成名称*/
PRIMARY KEYCLUSTERED/NONCLUSTERE)
/*CLUSTERED/NONCLUSTERE是否为聚集索引*/
(约束1,约束2...约束n)

例1、创建员工表YGGZ_Employee,对员工号EmpNo列创建指定约束名称的列级PRIMARY KEY约束。
在这里插入图片描述
sql语句:
在这里插入图片描述

2、修改表时创建主键约束

修改表时创建主键约束使用ALTER TABLE语句中的ADD子句。
格式如下:

ALTER TABLE <表的名称>
ADDCONSTRAINT 约束名称)PRIMARY KEY
/*若不指定约束的名称,系统会自动生成名称*/CLUSTERED/NONCLUSTERE)
/*CLUSTERED/NONCLUSTERE是否为聚集索引*/
(约束1,约束2...约束n)

3、删除创建的主键约束

删除表时创建主键约束使用ALTER TABLE语句中的DROP子句。
格式如下:

ALTER TABLE <表名>
	DROP CONSTRAINT (约束1,约束2...约束n)
	

例2、对创建的员工表YGGZ_Employee,删去部门编号的主键,对员工工号列创建PRIMARY KEY约束,且约束名称为PK_EmpNo。
sql语句:
--修改约束和删除约束 USE YGGZ ALTER TABLE YGGZ_Employee ADD CONSTRAINT PK_EmpNo PRIMARY KEY (EmpNo) /*修改对员工工号列创建PRIMARY KEY约束*/ GO ALTER TABLE YGGZ_Employee DROP CONSTRAINT PK_EmpNo /*删除所创建的PRIMARY KEY约束*/
在这里插入图片描述

(二)唯一性约束(UNIQUE约束)

唯一性约束指定一个或多个列的组合的值具有唯一性,防止在列中输入重复的值,为表中的一列或者多列提供实体完整性。与主键约束的区别是唯一性约束可以指定的列为空值,而唯一性约束的列值不允许为空值,且一个表可以创建多个唯一性约束,但主键约束只能有一个
通过T-SQL语句进行以下操作:

1、创建表时创建唯一性约束

(1)定义列级唯一性约束
语句格式:

CONSTRAINT 约束名称)
/*若不指定约束的名称,系统会自动生成名称*/
UNIQUE (CLUSTERED/NONCLUSTERED)
/*CLUSTERED/NONCLUSTERE是否为聚集索引*/

(2)定义表级唯一性约束
当应用于多列时要定义表级约束。

CONSTRAINT 约束名称)
/*若不指定约束的名称,系统会自动生成名称*/
UNIQUE (CLUSTERED/NONCLUSTERED)
/*CLUSTERED/NONCLUSTERE是否为聚集索引*/
(约束1,约束2...约束n)

2、修改表时创建唯一性约束

修改表时创建唯一性约束使用ALTER TABLE语句中的ADD子句。
格式如下:

ALTER TABLE <表的名称>
	ADDCONSTRAINT 约束名称)UNIQUE
	/*若不指定约束的名称,系统会自动生成名称*/
	(CLUSTERED/NONCLUSTERED)
	/*CLUSTERED/NONCLUSTERE是否为聚集索引*/
	(约束1,约束2...约束n)

3、删除创建的唯一性约束

删除所创建的唯一性约束使用ALTER TABLE语句中的DROP子句。
格式如下:

ALTER TABLE <表名>
	DROP CONSTRAINT (约束1,约束2...约束n)
	

二、参照完整性

外键用于与另外一个数据表的关联,是确定另一个表的字段,例如有两个表分别是基本表A和信息表B,其中C是表A的主键,而表B中也有C字段,则我们称C就是B的外键,所以外键的作用就是来维护多个表之间数据的一致性。

FOREIGN KEY外键约束,通过外键约束可以定义表与表之间的关系,即使用主键约束和唯一性约束定义主表的主键和唯一键,使用外键约束定义从表的外键,即可实现两个表之间的参照完整性

(一)创建表时创建外键约束

1、创建表时定义列级外键约束

语句格式:

CONSTRAINT 约束名称)
FOREIGN KEY
REFERENCES <表的名称>

2、创建表时定义表级外键约束

语句格式:

CONSTRAINT 约束名称)
FOREIGN KEY(列1,列2,列3...REFERENCES <表的名称>
(ON DELETE (CASCADE/NO ACTION))
/*指定采用DELETE语句进行删除操作,CASCADE表示当删除主键表中某行时,外键表中相应行也删除;NO ACTION表示当删除主键表中某行时,删除语句终止*/
(ON UPDATE (CASCADE/NO ACTION))
/*指定采用UPDATE语句进行更新操作,CASCADE表示当更新主键表中某行时,外键表中相应行也更新;NO ACTION表示当更新主键表中某行时,更新语句终止*/

(二)修改表时创建外键约束

使用ALTER TABLE 的ADD子句修改表时创建外键约束。
语句格式:

ALTER TABLE <表的名称>
	ADDCONSTRAINT 约束名称)UNIQUE
	/*若不指定约束的名称,系统会自动生成名称*/
	(CLUSTERED/NONCLUSTERED)
	/*CLUSTERED/NONCLUSTERE是否为聚集索引*/
	(约束1,约束2...约束n)

例、根据所给表结构,在数据库Sales中创建员工表Employee_0。
在这里插入图片描述
sql语句:
在这里插入图片描述

(三)删除表间的参照关系

使用ALTER TABLE 的DROP子句删除所创建的外键约束。
语句格式:

ALTER TABLE <表名>
	DROP CONSTRAINT (约束1,约束2...约束n)
	

例、对创建的员工表YGGZ_Employee,删去对EmyNo列定义的FK_EmyNo外键约束。
sql语句:
ALTER TABLE YGGZ_Employee DROP CONSTRAINT FK_EmyNo

三、域完整性

(一)检查约束(CHECK约束)

CHECK约束为输入列或整个表中的值设置条件,从而限制输入的值,从而保证数据完整性。以下通过使用T-SQL语句。

1、创建表时创建CHECK约束

格式如下:

CONSTRAINT 约束名称)
CHECK (逻辑表达式)
/*此处逻辑表达式为检查约束的表达式*/

例、创建员工表Employee_0,并对性别列设置CHECK约束,要求性别只能为男或者女生。
只需在Sex列的后面加上CHECK((Sex='男') OR (Sex='女'))
sql语句:
在这里插入图片描述

2、修改表时创建CHECK约束

使用ALTER TABLE 的ADD子句在修改表时创建CHECK约束。
语句格式:

ALTER TABLE <表的名称>
	ADD (CONSTRAINT <约束的名称>) CHECK (逻辑表达式)
	

例、在员工表Employee,修改年龄列设置CHECK约束,要求出生年龄在2001-01-01之前。
ALTER TABLE Employee ADD CHECK(Birthday<2001-01-01)

3、删除创建的CHECK约束

使用ALTER TABLE 的DROP子句删除所创建的CHECK约束。
语句格式:

ALTER TABLE <表的名称>
	DROP CONSTRAINT <约束的名称>
	

(二)默认约束(DEFAULT约束)

默认约束,即当数据表某列未指定数据时,系统会自动设置默认值。默认值可以是表达式,可以是常量,也可以是NULL值。

1、创建表时创建DEFAULT约束

例1、对数据库YGGZ,创建Employee_0表,其中对Sex列设置默认约束为男。
在这里插入图片描述

2、修改表时创建DEFAULT约束

使用ALTER TABLE 的ADD子句在修改表时创建DEFAULT约束。
语句格式:

ALTER TABLE <表的名称>
	ADD DEFAULT <表达式等等> FOR <列名>
	

例2、对数据库YGGZ中的Employee_0表上的Sex列创建DEFAULT约束为男。
sql语句:
ALTER TABLE Employee_0 ADD DEFAULT '男' FOR Sex

2、删除创建DEFAULT约束

使用ALTER TABLE 的DROP子句删除所创建DEFAULT约束。
语句格式:

ALTER TABLE <表的名称>
	ALTER COLUMN <列名> DROP DEFAULT
	

结语

以上就是本次数据库原理与应用的全部内容,篇幅较长,感谢您的阅读和支持,若有表述或代码中有不当之处,望指出!您的指出和建议能给作者带来很大的动力!!!

以上是关于数据库原理与应用(SQL Server)笔记 第六章 数据完整性的主要内容,如果未能解决你的问题,请参考以下文章

数据库原理与应用(SQL Server)笔记 第五章 索引和视图

数据库原理与应用(SQL Server)笔记 流程控制语句系统内置函数

数据库原理与应用(SQL Server)笔记 第十章 用户定义函数

数据库原理与应用(SQL Server)笔记 第三章 连接查询

数据库原理与应用(SQL Server)笔记 第十一章 游标

数据库原理与应用(SQL Server)笔记 第二章 简单数据查询