数据完整性的基本类型
数据完整性是指存储在数据库中的数据的一致性和准确性,共包含以下几个基本类型。
1. 实体完整性
实体完整性要求表中所有的行具有唯一的标识符。
例如:图书信息表中的图书编号与中华人民共和国公民的身份证号字段必须唯一。
实体完整性用于保证数据库中数据表的每一个特定实体都是唯一的。它可以通过主键约束(PRIMARY KEY)、唯一键约束(UNIQUE)、索引或标识属性(IDENTITY)来实现。
2.域完整性
域完整性就是保证数据库中的数据取值的合理性,即保证指定列的数据具有正确的数据类型、格式和有效的数据范围。通过为表的列定义数据类型以及检查约束(CHECK)、默认定义(DEFAULT)、非空(NOT NULL)和规则实现限制数据范围,保证只有在有效范围内的值才能存储到列中。
3.参照完整性
参照完整性定义了一个关系数据库中,不同的表中列之间的关系(父键与外键)。要求一个表中(子表)的一列或列组合的值必须与另一个表(父表)中的相关一列或列组合的值相匹配。被引用的列或列组合称为父键,父键必须是主键或唯一键,通常父键为主键,主键表是主表。
引用父键的一列或列组合称为外键,外键表是子表。如果父键和外键属于同一个表,则称为自参照完整性。子表的外键必须与主表的主键相匹配,只要依赖某一主键的外键存在,主表中包含该主键的行就不能被删除。
当增加、修改或删除数据库表中记录时,可以借助参照完整性来保证相关联表之间数据的一致性。
4.用户定义的完整性
这是由用户定义的完整性。用户可以根据自己的业务规则定义不属于任何完整性分类的完整性。由于每个用户的数据库都有自己独特的业务规则,所以系统必须有一种方式来实现定制的业务规则,即定制的数据完整性约束。
用户定义的完整性可以通过自定义数据类型、规则、存储过程和触发器来实现。
约束
约束是通过限制列中数据、行中数据以及表之间数据取值从而保证数据完整性的非常有效和简便的方法。
1.主键约束
主键约束在表中定义一个主键,唯一的标识表中的行。一个表只能有一个主键约束。
当向表中的现有列添加主键约束时,SQLServer将检查列中现有的数据以确保现有数据遵从主键的规则,即无空值、无重复值。
当主键约束由另一表的外键约束引用时,不能删除被引用的主键约束,要删除它,必须先删除引用的外键约束。
每个表都应有一个主键。主键可以是一列或列组合。
创建(删除)主键约束的方式有:
(1)利用Management Studio定义(删除)主键;
(2)利用T-SQL语句定义(删除)主键;
在创建表时创建主键约束的语法格式如下:
•语法格式1:
CREATE TABLE table_name
(column_name data_type
[CONSTRAINT constraint_name]
PRIMARY KEY
[CLUSTERED︱NONCLUSTERD][,…])
•语法格式2:
CREATE TABLE table_name
([CONSTRAINT constraint_name]
PRIMARY KEY
[CLUSTERED︱NONCLUSTERD]
(column_name1[,…n])[,…])
向已有表中添加主键约束语法格式如下:
ALTER TABLE table_name
ADD[CONSTRAINT constraint_name]
PRIMARY KEY
(column_name11[,…n]) [,…])
删除表中的主键约束语法格式如下:
ALTER TABLE table_name
DROP CONSTRAINT constraint_name
•注意:向表中添加主键约束时,SQL Server 将检查现有记录的列值,以确保现有数据符合主键的规则,所以在添加主键之前要保证主键列没有空值和重复值。
2.唯一性约束
可使用UNIQUE约束确保在非主键列中不输入重复值。在允许空值的列上保证唯一性时,应使用UNIQUE约束而不是PRIMARY KEY约束,不过在该列中只允许有一个NULL值。一个表可以定义多个UNIQUE约束,但只能定义一个PRIMARY KEY约束。FOREIGN KEY约束也可引用UNIQUE约束。
创建(删除)唯一性约束的方式有:
(1)利用Management Studio定义(删除)唯一性约束
(2)利用T-SQL语句定义(删除)唯一性约束
在创建表时创建唯一性约束语法格式如下:
•语法格式1:
CREATE TABLE table_name
(column_name1 data_type
[CONSTRAINT constraint_name]
UNIQUE [CLUSTERED︱NONCLUSTERD][,…])
•语法格式2:
CREATE TABLE table_name
([CONSTRAINT constraint_name]
UNIQUE
[CLUSTERED︱NONCLUSTERD]
(column_name1[,…n])[,…])
说明:语法格式1定义单列唯一约束,语法格式2定义多列组合唯一约束。
向已有表中添加唯一约束语法格式如下。
ALTER TABLE table_name
ADD[CONSTRAINT constraint_name]
UNIQUE
(column_name1[,…n]) [,…])
删除唯一约束语法格式如下。
ALTER TABLE table_name
DROP CONSTRAINT constraint_name
3.检查约束
CHECK约束是限制用户输入某一列的数据取值,即该列只能输入一定范围的数据。
CHECK约束可以作为表定义的一部分在创建表时创建,也可以添加到现有表中。表和列可以包含多个CHECK约束。允许修改或删除现有的CHECK约束。
在现有表中添加CHECK约束时,该约束可以仅作用于新数据,也可以同时作用于已有的数据。默认设置为CHECK约束同时作用于已有数据和新数据。当希望现有数据维持不变,则使用约束仅作用于新数据选项。
创建(删除)检查约束的方式有:
(1)利用Management Studio定义(删除)检查约束
(2)利用T-SQL语句定义(删除)检查约束
在创建表时创建检查约束语法格式如下。
CREATE TABLE table_name
(column_name data_type
[CONSTRAINT constraint_name]
CHECK(logical_expression) [,…])
向已有表中添加检查约束语法格式如下。
ALTER TABLE table_name
WITHNOCHECK
ADD
[CONSTRAINT constraint_name]
CHECK (logical_expression) [,…])
删除检查约束语法格式如下。
ALTER TABLE table_name
DROP CONSTRAINT constraint_name
4.默认值约束
默认约束是指在用户未提供某些列的数据时,数据库系统为用户提供的默认值。从而简化应用程序代码和提高系统性能。
表的每一列都可包含一个DEFAULT定义。可以修改或删除现有的DEFAULT定义,但必须首先删除已有的DEFAULT定义,然后通过新定义重新创建。
在创建表时创建默认值约束语法格式如下
•语法格式1:
CREATE TABLE table_name
(column_name data_type
[CONSTRAINT constraint_name]
DEFAULT default_value [,…])
•语法格式2:
CREATE TABLE table_name
([CONSTRAINT constraint_name]
DEFAULT default
FOR column [,…])
向已有表中添加默认值约束语法格式如下。
ALTER TABLE table_name
ADD[CONSTRAINT constraint_name]
DEFAULT default_value
FOR column [,…])
删除默认值约束语法格式如下。
ALTER TABLE table_name
DROP CONSTRAINT constraint_name
5.外键约束
外键约束是为了强制实现表之间的参照完整性,外键FOREIGN KEY可以和主表的主键或唯一键对应,外键约束不允许为空值,但是,如果组合外键的某列含有空值,则将跳过该外键约束的检验。
(1)利用Management Studio定义(删除)外键约束
(2)利用T-SQL语句定义(删除)外键唯一性约束
在创建表时创建外键约束
•语法格式1:
CREATE TABLE table_name
(column_name data_type
[CONSTRAINT constraint_name]
[FOREIGN KEY]
REFERENCES
Reference_Table[(Reference_Column)]
[ON DELETE CASCADE︱
ON UPDATECASCADE] [,…])
•语法格式2:
CREATE TABLE table_name
([CONSTRAINT constraint_name]
[FOREIGN KEY]
[(column_name [,…n] ) ]
REFERENCES
Reference_Table[(Reference_Column[,…n])]
[ON DELETE CASCADE︱
ON UPDATE CASCADE] [,…])
说明:语法格式1定义单列外键约束,语法格式2定义多列组合外键约束。
其中:ON DELETE CASCADE表示级联删除, ONUPDATE CASCADE表示级联更新,他们也称为级联参照完整性约束。级联参照完整性约束是为了保证外键数据的关联性。当删除外键引用的主键记录时,为了防止孤立外键的产生,同时删除引用它的外键记录。
向已有表中添加外键约束
ALTER TABLE table_name
ADD
[CONSTRAINT constraint_name]
[FOREIGN KEY]
[(column_name [, …n] ) ]
REFERENCES
Reference_Table[(Reference_Column[, …n])]
[ON DELETE CASCADE︱
ON UPDATE CASCADE] [,…])
删除外键约束
ALTER TABLE table_name
DROP CONSTRAINT constraint_name

