数据完整性
概念
数据完整性是指存储在数据库中数据的准确性和可靠性,它是应防止数据库中存在不符合语义规定的数据和防止因错误信息的输入输出造成无效操作或错误信息而提出的
类型
- 域完整性:域完整性指特定列的项的有效性
- 实体完整性:要求表中的所有行具有唯一的标识,例如主关键字值
- 引用完整性:确保量表之间的关系在更新和删除期间保持同步
约束
使用不同的约束强制数据完整性。约束时重要的数据库对象
域完整性类型
DEFAULT约束
指定列的默认值
为现有表添加DEFAULT约束
示例:
1 | USE SCHOOL |
创建表时添加DEFAULT约束
示例:
1 | USE SCHOOL |
注:每一列只能有一个DEFAULT
约束,不能用于IDENTITY
属性的列,若默认值长度大于该字段允许的字符空间,则插入到该列的值会被截断
CHECK约束
限制列可接受的值,控制列值的范围,检车列值
CHECK
约束默认检查现有数据和所有新数据,使用WITH NOCHECK
中检查新数据
创建表时添加CHECK约束
示例:
1 | USE SCHOOL |
为现有表添加CHECK约束
示例:
1 | USE SCHOOL |
删除约束
示例:
1 | USE SCHOOL |
NULL约束
指定列是否允许NULL
,空值(或NULL
)不同于0
、空白或长度为0的字符串(如””)。NULL的意思是没有输入
创建表时指定是否允许为NULL
示例:
1 | USE SCHOOL |
修改现有表的字段是否允许为NULL
示例:
1 | USE SCHOOL |
实体完整性类型
primary key约束
能唯一标识表中每一行的值的一列或一组列,这样的一列或多列称为表的主键。一个表只能有一个primary key
约束,并且primary key
约束中的列不允许空值,不允许重复。如果对多列定义了primary key
约束,则一列中的值可能会重复,但来自primary key
约束定义中所有列的任何值组合必须唯一。
创建表时指定主键
示例:
1 | USE SCHOOL |
给现有的表添加主键
示例:
1 | USE SCHOOL |
UNIQUE约束
确保在非主键列中不输入重复的值,可以对一个表定义多个UNIQUE
约束,但只能定义一个PRIMARY KEY
约束,UNIQUE
约束允许一个NULL
值,而PARMARY KEY
约束不允许有NULL
值
创建UNIQUE
约束时,同时会创建一个同名的非聚集索引,当插入或修改数据时,UNIQUE
约束自动执行校验数据
创建表时同时创建UNIQUE约束
示例:
1 | USE SCHOOL |
给现有的表添加UNIQUE约束
示例:
1 | USE SCHOOL |
引用完整性类型
FOREIGN KEY约束
用于建立和加强两个表数据之间的链接,可以是一列或多列,称为表的外键(FK
),一个表可以有多个FOREIGN KEY
约束,选作外键必须与其他对应的主键列具有相同的数据类型,每个键中列的数必须相等,即如果主键是一列,则外键是一列,如果主键是多列,则外键对应也是多列。FOREIGN KEY
约束不仅可以与另一个表的PRIMARY KEY
约束相关联,还可以定义为引用另一个表的UNIQUE
约束列
主键要先创建好才能创建外键,FOREIGN KEY
约束不能自动创建索引
外键约束的主要目的时控制可以存储在外键表中的数据,同时它也可以控制对主键表中数据的更改
示例:
1 | USE SCHOOL |
总结
DEFAULT
、CHECK
、NULL
约束是针对表中的列进行完整性的控制,因此叫做域完整性PRIMARY KEY
、UNIQUE
约束是针对行限制数据行的唯一性,因此叫做实体完整性FOREIGN KEY
约束是针对表与表之间的关系控制数据完整性,因此叫参照完整性