学习概要
- 数据完整性分类
- 实体完整性
- 域完整性
- 参照完整性
- 用户定义完整性
- 约束机制
- 主键约束 PRIMARY KEY
- 唯一性约束 UNIQUE
- 检查约束 CHECK
- 默认值约束 DEFAULT
- 外键约束 FOREIGN KEY
- 非空约束 NOT NULL
说实话,我也不甚理解这些概念,只能说先记下,待未来的某一天,能够恍然大悟
数据完整性分类
数据完整性是要求数据库中数据有正确性和一致性
实体完整性
- 含义:表的关键字不能为空,且取值唯一
- 举例:在学生表中,学号能唯一确定以为学生
- 手段:索引、UNIQUE约束、PRIMARY KEY约束 或 IDENTITY属性
域完整性
- 含义:表中的列必须满足某种特定数据类型或约束
- 举例:在学生表中,性别只能是男/女
- 手段:限制数据类型、FOREIGN KEY约束、CHECK约束、DEFAULT定义、NOTNULL定义
参照完整性
- 含义:有关联的两个表主键和外键值对应
- 举例:在学生表中,学生表与成绩表中的“学号”应当对应
- 手段:FOREIGN KEY约束、CHECK约束
用户定义完整性
- 含义:用户自定义的规则
- 举例:在学生表中,用户定义学生年龄小于30岁
- 手段:用户自己执行
约束机制
约束是一种强制数据完整性的标准机制,确保在字段输入有效数据,维护各表之间的关系
作用在被约束的列上
语法
create table 表名
(
列名 列属性 constraint 表名_pk primary key,
列名 列属性 constraint 列名_uk unique,
列名 列属性 constraint 列名_ck check (条件表达式),
列名 列属性 default '默认值',
列名 列属性 constraint 列名_fk foreign key(列名) reference 被参照表(被参照列),
列名 列属性 not null,
)go
SQL server支持以下6种约束,语法为添加约束(上面的是创建表时设置约束)
主键约束 PRIMARY KEY
确保该列非空且不重复
可以强制实现 实体完整性
alter table 表名
add constraint 表名_pk
primary key nonclustered (列名)
go
唯一性约束 UNIQUE
确保该列不重复
alter table 表名
add constraint 列名_uk
unique nonclustered (列名)
检查约束 CHECK
用条件表达式判断输入值
可以强制实现 域完整性
alter table 表名
add constraint 列名_ck
check (条件表达式)
默认值约束 DEFAULT
如果该列无输入值,则会自动填充默认值
alter table 表名
add constraint 列名_df
default 默认值 for 列名
外键约束 FOREIGN KEY
该列添加新值时,确保被参照的列已存在该值
可以强制实现 参照完整性
alter table 表名
add constraint 列名_fk
foreign key (列名) references 被参照表(被参照列)
非空约束 NOT NULL
该列不接受空值
可强制实现域完整性
alter table 表名
alter column 列名 列属性 not null