数据的完整性=精确性+可靠性
数据丧失完整性体现在:数据可中存在不符合规定的数据或错误的信息,例如:学号重复,身份证号重复,年龄为负数,薪水为负数,性别不存在
数据丧失完整性:是在设计表结构的时候造成的。
保证数据的完整性:在设计表结构的时候,添加约束。
约束的分类:
1.实体[行]完整性约束:保证行记录的唯一
主键约束 primary key
自动增长列约束 identity(起点,步长)
唯一约束 unique
2.域[列,字段]完整性约束:保证列的数据类型,格式,取值范围,长度正确
检查约束
外键约束
默认值约束
非空约束
3.引用完整性约束:建立在主外键关系之上,保证表与表之间的数据完整性
作用:
1.禁止在子表中,添加主表中不存在的记录
2.禁止修改主表中,被子表引用的记录
3.禁止删除主表中,被子表引用的记录
4.用户自定义完整性约束:高级约束
触发器
存储过程
规则
1.主键约束 primary key
作用:添加了主键约束的列,行记录具有唯一性
问题:一个表中允许有几个主键?
答案:一个表中只允许存在1个主键
问题:选取某列作为主键列的原则?
答案:
1.最少性:尽可能选择单列,作为主键
2.稳定性:尽可能选取,更新比较少的列
当一个表中,不存在,行记录唯一的列,没有符合作为主键列原则的列时?
答案:为该表添加一个标识列,作为主键,唯一的标识行记录,没有实际意义。
*****由多列组成的主键,称为,组合 主键 此做法不推荐
2.唯一约束 unique
作用:添加了唯一约束的列,行记录具有唯一性
使用场合:一般是非主键列
区别:唯一约束和主键约束的区别
唯一约束的列,行记录允许空值,但只允许有1个空值
主键约束的列,行记录不允许有空值
3.标识列约束 identity(起点,步长)
作用:添加了标识列约束的列,行记录不需要赋值,会自动增长
使用场合:一般用在 整形的列上
==========================
4.检查约束 check
作用:约束当前列的取值范围,格式,长度
例如:
check(age>0 and age<200) 限制年龄为0-200
check(sex='男' or sex='女') 限制性别
check(tel like '0716%' and len(tel)=11) 限制荆州电话格式以0716开头,长度为11个字符
check(tel like '186%' or tel like '159%')
5.默认值约束 default
作用:用于向列中,插入默认值,有默认值约束的列,可赋值,可不赋值
例如:
default(18) 年龄默认为18
default('男')性别默认是 男
default('地址不详') 地址默认 不详
default(getdate()) 默认为当前时间
6.非空约束 not null
作用:约束当前列的值,不允许为空
注意:空格也算一个字符,不是null
7.外键约束 foreign key
作用:
1.禁止在子表中,添加主表中不存在的记录
2.禁止修改主表中,被子表引用的记录
3.禁止删除主表中,被子表引用的记录
外键所在的表是子表,此子表是相对于主表而言的。
问:一个表中允许有几个主键?几个外键?
1个主键,N个外键
语法:
子表中的外键列 int foreign key references 主表名(主表中的主键)
注意:
1.建立主外键关系的列,列名可不同,但是数据类型和长度必须相同
2.被引用的列,必须是主键,而且,具有唯一性
经验:
1.如何辨别主表,子表
主表和子表都是相对的。
a.看表的关系图,钥匙指向的是主表
b.逻辑判断,先存在一定是主表