第十三章_ 约束
1.约束的概述
1.1为什么需要约束
为了保证数据的完整性,SQL规范以约束的方式对 表数据进行额外的条件限制.从以下四个方面考虑:
-
实体完整性(Entity Integrity)
:例如,同一个表中,不能存在两条完全相同无法区分的记录 -
域完整性(Domain Integrity)
: 例如: 年龄范围0-120 性别范围 男/女 -
引用完整性(Referential Integrity)
: 例如: 员工所在的部门,在部门表中要找到这个部门 -
用户自定义完整性(User-defined Integrity)
: ;例如 : 用户名唯一,密码不能为空等,本部门经理的工资不得高于本部门职工平均工资的5背
1.2什么是约束
约束时表级的强制规定
1.3 约束的分类
角度1:约束的字段个数
单列约束 vs 多列约束
角度2: 约束的作用范围
列级约束 : 将此约束声明在对应的字段后面
表级约束 : 在表中所有的字段都声明完,在所有字段后面声明的约束
角度3: 约束的作用(或功能)
-
not null ( 非空约束)
-
unique (唯一性约束)
-
primary (主键约束)
-
foreign (外键约束)
-
check (检查约束)
-
default (默认值约束)
1.4 如何添加约束
可以在创建表时规定约束(通过CREATE TABLE 语句)
,
或者在表创建后通过ALTER TABLE语句
规定约束,删除约束
1.5如何查看表中的约束
2.非空约束
用来限制字段不能为空
可以在创建时添加约束
可以在ALTER TABLE时添加约束
可以在ALTER TABLE时删除约束
3.唯一性约束
防止某个字段重复
3.1关键字
unique
可以在创建时添加约束
可以在ALTER TABLE时添加约束
可以在ALTER TABLE时删除约束
null可以重复
3.2 三种添加关键字方式
- 创建表时,(如上图)
-
修改表,既可以使用add,也可以使用modify
- add 和 modify的区别在多个约束中体现,modify如果直接写添加的约束会删除之前的约束
3.3 复合的唯一性约束
合起来唯一就可以
3.4删除唯一性约束
-
添加唯一性约束的列上也会自动创建唯一索引
-
删除唯一约束只能通过删除唯一索引的方式删除
-
删除时需要指定唯一索引名,唯一索引名和唯一约束名一样
-
如果创建的唯一性约束结束时未指定名称,如果是单列,就默认和列名相同: 如果是组合列,那么默认与组合第一个列名一样
4.PRIMARY KEY约束
4.1作用:
用来唯一标识表中的一行记录
4.2 关键字
primary key
4,3 特点
-
主键约束相当于
唯一约束+非空约束的组合
,主键约束列不允许重复,也不允许出现空值 -
不要修改主键字段的值,如果修改主键的值,就有可能破坏数据的完整性
4.4创建约束
一个表只允许存在一个主键
通常也必须存在一个主键
特征: 非空且唯一,复合型约束都不能为空
正常人不会删除主键约束
5.自增列: AUTO_ONCREMENT
5.1作用
某个字段自增
5.2 关键字
auto_increment
5.3 特点和要求
-
一个表只能有一个自增长列
-
当需要生产唯一表示符或顺序值时,可设置自增长
-
自增长列约束的列必须是键列(主键列, 唯一键列)
-
自增约束的列的数据类型必须时整数类型
-
如果自增列指定了0和null,就在当最大值的基础上自增;如果自增列手动指定了具体值,直接赋值为具体值
修改主键值不会改变自增计数器的状态。即使手动将某一行的主键值设置为比当前最大值大的值,自增计数器仍然会从之前的最大值继续递增。
6.FOREIGN KEY约束
6.1 作用
限定某个表的某个字段的引用完整性
6.2关键字
FOREIGN KEY
6.3特点
①从表的外键列,必须引用/参考主表的主键或唯一约束的列
因为被依赖/被参考的值必须是唯一的
②在创建外键约束时,如果不给外键约束的话,默认不是列名,耳式自动产生一个外键名,也可以指定外键约束名
③创建表时就指定外键约束的话,先创建主表再创建从表
④删表时,先删从表(或先删除外键约束),再删除主表
⑤当主表的记录被从表参照时,主表的记录将不允许被删除,如果要删除记录,需要先删除从表中依赖该记录的数据,然后才可以删除主表的数据
⑥在"从表"中指定外键约束,并且一个表可以建立多个外键约束
⑦从表的外键列与主表被参照的列名字可以不同,但是数据类型必须相同,逻辑意义一样.如果类型不一样,创建子表时,就会出现错误
⑧当创建外键约束时,系统默认会在所在的列上建立对应的索引.但是索引名时列名,不是外键的约束名
⑨删除外键约束后,必须手动删除对应的索引
6.4 约束等级
casecade
外键约束最好采用:ON UPDATE CASCADE ON DELETE RESTRICT
的方式
7. CHECK约束
7.1 作用
检查某个字段的值是否符合xx要求
7.2关键字
CHECK
7.3 说明: MySQL 5.7不支持
MySQL5.7可以使用,但不起任何作用
但是MySQL8.0中可以使用check约束了
8. default 约束
添加默认值