文档介绍:第4章约束、默认和规则
数据完整性
约束
默认
规则
数据完整性
数据完整性就是存储在数据库中的数据的一致性和正确性。
根据数据完整性措施所作用的数据库对象和范围不同,数据完整性分为:
实体完整性又称为行完整性,即数据库中的所有行都具有一个非空且没有重复的主键值。
域完整性又叫列完整性,以保证列数据的输入具有正确的数据类型、格式和有效的数据范围。
参照完整性又叫引用完整性,旨在保证主表和从表数据的一致性。
用户定义完整性用户定义的不属于以上完整性的特定规则。
数据完整性
在SQL SERVER2000里,我们可以采取许多方法保证各种完整性:
实体完整性通过建立唯一索引、PRIMARY KEY约束、UNIQUE约束、IDENTITY属性等来强制主键的唯一性。
域完整性强制域有效性可以通过限制数据类型、CHECK约束和规则、FOREIGN KEY、DEFAULT、NOT NULL定义实现。
参照完整性通过FOREIGN KEY和CHECK约束来实现。
约束
设计数据库时要识别数据的有效值,并决定如何强制实现列中数据的完整性。SQL SERVER 2000提供多种强制列中数据完整性的机制:
CHECK约束
PRIMARY KEY约束
FOREIGN KEY约束
UNIQUE约束
DEFAULT约束
CHECK 约束
CHECK约束用于限制输入到一列或多列的值的范围:用户想输入的数据值如果不满足CHECK约束中的条件(逻辑表达式)将无法正常输入。
使用企业管理器定义、删除CHECK约束
使用T-SQL语句创建CHECK约束(在创建或修改表时);
语法格式: [CONSTRAINT 约束名]
CHECK(逻辑表达式)
使用T-SQL语句删除CHECK约束
语法格式: DROP CONSTRAINT 约束名
CHECK 约束
例:创建表成绩(学号,课程号,成绩)的同时定义CHECK约束要求成绩的范围为0~100。T-SQL语句如下:
CREATE TABLE 成绩
(学号 char(8) NOT NULL,
课程号 char(3) NOT NULL,
成绩 tinyint NULL
CONSTRAINT ck_cj CHECK(成绩>=0 and成绩<=100))
例:为存在的表成绩(学号,课程号,成绩)定义CHECK约束要求成绩的范围为0~100。T-SQL语句如下:
ALTER TABLE 成绩
ADD CONSTRAINT ck_cj CHECK(成绩>=0 and成绩<=100)
例:删除上例建立CHECK约束。T-SQL语句如下:
ALTER TABLE 成绩
DROP CONSTRAINT ck_cj
PRIMARY KEY 约束
通过主键可以强制表的实体完整性。主键不允许空值,且不同两行的键值不能相同,即主键可以唯一标识单个行。
使用企业管理器定义、删除PRIMARY KEY约束
使用T-SQL语句创建PRIMARY KEY约束(创建/修改表时)
语法格式: [CONSTRAINT 约束名]
PRIMARY KEY [CLUSTERED|NONCLUSTERED]
使用T-SQL语句删除PRIMARY KEY约束
语法格式: DROP CONSTRAINT 约束名
PRIMARY KEY 约束
例:创建表学生(学号,姓名,性别)的同时定义学号为主键。T-SQL语句如下:
CREATE TABLE 学生
(学号 char(8) NOT NULL
CONSTRAINT pk_xs PRIMARY KEY CLUSTERED,
姓名 char(10) ,
性别 char(2) )
例:为存在的表学生(学号,姓名,性别)定义学号为主键。T-SQL语句如下:
ALTER TABLE 学生
ADD CONSTRAINT pk_xs PRIMARY KEY CLUSTERED(学号)
例:删除上例建立的主键约束。T-SQL语句如下:
ALTER TABLE 学生
DROP CONSTRAINT pk_xs
FOREIGN KEY约束
通过外键可以建立和强制主表和从表的参照完整性,即从表的外键要么为空,要么等于主表中已存在的主键值。
使用企业管理器定义、删除FOREIGN KEY约束
使用T-SQL语句创建FOREIGN KEY约束(创建/修改表时)
语法格式: [CONSTRAINT 约束名]
FOREIGN KEY (从表外键)
REFERENCES 主表(主表主键)
使用T-SQL语句删除FOREIGN KEY约束
语法格式: DROP CONSTRAINT