数据表的完整性
实体完整性
每个表中有一个必须要指定的字段,主要依赖主键约束
区域完整性
针对表中的某个字段进行特殊化限制,主要依赖剩余的约束
参照完整性
表与表之间的一种特殊化关联限制,主要依靠外键约束
维护数据表的完整性
什么是约束:使用约束、键的作用来维护数据表的完整性
约束有哪些:
-
自增约束
-
非空约束
-
检查约束
-
默认约束
-
唯一约束
-
主键约束
-
外键约束
一般在设置列特征的时候都是提前在数据库设计时需要考虑明确,约束都是在数据库设计时必须考虑明确的
数据表的特征
已知创建数据表的语法是
CREATE TABLE 表名
(
字段1 数据类型 列的特征,
字段2 数据类型 列的特征,
......
)
列特征包含的内容有:
1.是否可以为空(NULL):在输入数据的时候,如果这个列允许为空则可以不用填写,否则必须为该列填写对应的数据内容
2.是否是标识列(自动编号)
3.是否有默认值:如果数据表的某一列在用户不主动输入数据的时候,希望能够提供一个默认的内容
Adrress NVARCHAR(20) DEFAULT('地址不详'),
4.是否为主键:主键是实体的唯一标识,保证实体不被重复记录,一个数据表必须有主键才能进行更新、删除指定的实体
[TID] INT IDENTITY(10000,1) primary key,
5.是否有检查设置:如果数据表的某一列具有检查限制,当用户为这一列添加数据时,必须要保证添加的数据满足检查限制的要求
如果添加数据违反检查特征:
Age INT CHECK(Age>=18),
Sex nvarchar(2) CHECK(SEX='男' or SEX='女'),
6.是否有唯一设置:如果这一列具有唯一设置,那么必须保证在给这一列添加数据时,所添加的数据在这一列中是绝对唯一的存在
Class NVARCHAR(20) UNIQUE
如果添加数据违反唯一特征:
7.是否有外键特征:如果该列具有外键约束,那么在向该列添加数据时必须要按照外键的目标数据表中已有的数据去填写,外键指向的数据表的字段必须是一个主键
如果数据违反外键约束
如果当前数据表被其他数据表以外键约束,如果要删除当前数据表中的数据则需要慎重考虑,有可能删除失败
标识列
标识列使用的意义
例如全中国有14亿人,名字叫“张三”的共有500个,此时如果找特定的张三非常困难,所以中国每个合法公民都有一张身份证,ID是14亿中唯一的
SQLServer中提供了一种标识列,也叫作“自增编号”,它自身可能不具有任何意义,但是我们可以规定标识列具有特定的意义,例如QQ:10000
标识列如何使用
-
该列必须是整数类型,或者也可以是没有小数部分的精确类型
-
标识种子:标识列的起始值
-
标识增量:标识列每次递增的值(自动增加的值)
--如果将TID列设为标识列,则该列数据类型必须为整数,使用IDENTITY关键字,小括号中第一个参数是标识种子,第二个参数是标识增量
[TID] INT IDENTITY(10000,1),
注意问题
-
有标识列的数据表被删除某一行时,数据库会将这一行空缺出来不会填补
-
标识列由系统自动维护,用户既不能自己输入数据,也不能自己修改数据
-
标识列可以同时定义为主键,也可以不定以为主键,根据数据库设计决定