数据的完整性
实体完整性 又称为行完整性,即数据库中的所有行都具有一个非空且没有重复的主键值
MSSQL中通过唯一索引、PRIMARY KEY约束、UNIQUE约束、INDENTITY属性等来强制主键的唯一性
域完整性 又叫列完整性,以保证列数据的输入具有正确的数据类型、格式和有效的数据范围
强制域有效性可以通过限制数据类型、CHECK约束和规则、FOREIGN KEY、DEFAULT、NOTNULL定义
参照完整性 又叫引用完整性,旨在保证主表和从表数据的一致性,通过FOREIGN KEY和CHECK约束实现
用户定义完整性 用户定义的不属于以上完整性的特点那个规则
SQL数据库约束、默认和规则
1)约束 CONSTRAINT
实现约束的五种方式:
(1) CHECK约束
[CONSTRAINT 约束名] CHECK (逻辑表达式)
CREATE TABLE 成绩
(
学号 char(8) NOT NULL,
CONSTRAINT ck_cj CHECK (成绩>=0 and 成绩<=100)
)
ALTER TABLE 成绩
ADD CONSTRAINT ck_cj (成绩>=60 and 成绩<=100)
ALTER TABLE 成绩
DROP CONSTRAINT ck_cj
(2)PRIMARY KEY约束
[CONSTRAINT 约束名] PRIMARY KEY [CLUSTERED] [NONLUSTERED]
CREATE TABLE 学生
(
学号 char(8) NOT NULL CONSTRAINT pl_xs PRIMARY KEY CLUSTERED
)
ALTER TABLE 学生
ADD CONSTRAINT pk_xs PRIMARY KEY CLUSTERED(学号)
(3)FOREIGN KEY约束 references
[CONSTRAINT 约束名] FOREIGH KEY (从表外键) PEFERENCES 主表 (主表外键)
CREATE TABLE 成绩
(
学号 char(8) NOT NULL FOREIGN KEY REFERENCES 学生 (学号)
)
(4)UNIQUE约束
[CONSTRAINT 约束名] UINQUE [CLUSTERED\NONCLUSTERED](列名...)
CREATE TABLE 职工
(
身份证号 char(18) NULL CONSTRAINT uni_sfz UNIQUE
)
(5)DEFAULT约束
[CONSTRAINT 约束名] DEFAULT 默认约束值 FOR 列名
CREATE TABLE 学生
(
性别 char(2) DEFAULT '男'
)
默认[DEFAULT]
默认是一种数据库对象,可以绑定在一列或者多列上,作用与DEFAULT约束相似,在插入数据行时,为没有指定数据的列提供实现定义的默认值
创建默认对象
CREATE DEFAULT 默认对象名 AS 默认值
USE 学生成绩
CREATE DEFAULT sex_mr AS '男'
绑定默认对象
sp_bindefault [@defname=] '默认对象名' [@objname] '绑定的列名'
use 学生成绩
go
exec sp_bindefault 'sex_mr','学生.性别'
删除绑定
sp_unbindefault [@objname=] '绑定的列名'
use 学生成绩
go
exec sp_unbindefault '学生.性别'
删除默认对象
DROP DEFAULT 默认对象名
use 学生成绩
go
drop default sex_mr
规则(RULE)
规则也是一种数据库对象,可以绑定在一列或多列上,作用与CHECK约束相似,在插入数据行时,指定接收的数据值的范围
创建规则
CREATE RULE 规则名 AS 规则条件
USE 学生成绩
go
create rule cj_rl as @cj>=0 and @cj<=100
绑定规则
sp_bindrule [@rulename=] '规则对象名' [@objname] '绑定的列名'
use 学生成绩
go
exec sp_bindrule 'cj_rl','成绩.成绩'
删除规则
sp_unbindrule [@objname=] '绑定的列名'
use 学生成绩
go
exec sp_unbindrule '成绩.成绩'
删除规则对象
DROP RULE 规则对象名
use 学生成绩
go
drop rule cj_rl