学习概要

  • 数据完整性分类
  • 实体完整性
  • 域完整性
  • 参照完整性
  • 用户定义完整性
  • 约束机制
  • 主键约束 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