第13章 约束
创作日期:2021-11-28
1.约束(constraint)概述
1.1 为什么需要约束
数据完整性(Data Integrity)是指数据的精确性(Accuracy)和可靠性(Reliability)。它是防止数据库中存在不符合语义规定的数据和防止因错误信息的输入输出造成无效操作或错误信息而提出的。
为了保证数据的完整性,SQL规范以约束的方式对表数据进行额外的条件限制。从以下四个方面考虑:
- 实体完整性(Entity Integrity):例如,同一个表中,不能存在两条完全相同无法区分的记录
- 域完整性(Domain Integrity):例如,年龄范围0-120,性别范围“男/女”
- 引用完整性(Referential Integrity):例如,员工所在部门,在部门表中要能找到这个部门
- 用户自定义完整性(User-defined Integrity):例如,用户名唯一,密码不能为空等,本部门经理的工资不得高于本部门职工的平均工资的5倍。
1.2 什么是约束
约束是表级的强制规定。可以在创建表时规定约束(通过 CREATE TABLE 语句),或者在表创建之后通过 ALTER TABLE 语句规定约束。
1.3 约束的分类
- 根据约束数据列的限制,约束可分为:
- 单列约束:每个约束只约束一列
- 多列约束:每个约束可约束多列数据
- 根据约束的作用范围,约束可分为:
- 列级约束:只能作用在一个列上,跟在列的定义后面
- 表级约束:可以作用在多个列上,不与列一起,而是单独定义
- 根据约束起的作用,约束可分为:
- NOT NULL 非空约束,规定某个字段不能为空
- UNIQUE 唯一约束,规定某个字段在整个表中是唯一的
- PRIMARY KEY 主键(非空且唯一)约束
- FOREIGH KEY 外键约束
- CHECK 检查约束
- DEFAULT 默认值约束
- 注意:MySQL不支持check约束,但可以使用check约束,而没有任何结果
1.4 查看表中约束
SELECT * FROM information_schema.table_constraints
WHERE TABLE_NAME = 'employees';
2.非空约束
2.1 作用
限定某个字段/某列的值不允许为空
2.2 关键字
NOT NULL
2.3 特点
- 默认,所有的类型的值都可以是NULL,包括INT,FLOAT等数据类型
- 非空约束只能出现在表对象的列上,只能某个列单独限定非空,不能组合非空
- 一个表可以有很多列都分别限定了非空
- 空字符串“不等于NULL,0也不等于NULL”
2.4 添加非空约束
- 创建表时添加约束: 通过 CREATE TABLE 语句规定约束
CREATE TABLE a_a(
id INT NOT NULL,
last_name VARCHAR(15) NOT NULL,
email VARCHAR(25),
salary DECIMAL(10,2)
)
DESC a_a;
表创建之后添加