一.约束
1.整体概述
- 数据的完整性
- 实体完整性(两条数据不能完全相同)
- 域完整型(年龄必须大于0)
- 引用完整性(员工在部门,部门表中必须有该部门)
- 用户自定义完整性(用户名唯一,密码不为空)
2.什么是约束
- 约束就是对表中字段的限制
3.约束的分类
①字段个数
- 单列
- 多列
②约束范围
- 列级
- 表级
③约束作用
- not null
- unique
- primary key
- foreign key
- check
- default
④添加约束的两种方式
- 创建表时添加:create table
- 修改表时添加:alter table modify
二.具体字段名
1.not null:不允许为空
- 只能是单列限制
2.unique:某个值不能重复
①列级约束(约束字段不能想通过)
②表级约束(同时约束几个字段不能都相同)
③删除约束
- 添加唯一性约束的列会有唯一索引
- 删除唯一性约束的列也需删除唯一索引
- 唯一索引名和唯一约束名相同
- 删除:alter table _ drop index _
3.主键约束:primary key(非空且唯一)
①要求
- 唯一标识表的一条记录(非空唯一)
- 可有复合主键(列不允许出现空值)
- 主键索引会自动配置名称为primary
②设置
- 主键约束可以用列级也可以用表级
- 表级约束没必要起名字,因为主键索引名肯定是primary
③主键的增加和删除
- alter table _ add primary key(id)
- alter table drop primary key(不会删除主键约束)
④自增列 auto_increment
- 一个表中只有一个自增列,类型满足整型
- 添加自增列 create table _ id INT primary key auto_increment
- 添加流程:显式向主键字段添加0或null时,会自动递增加上原来数值
指明不存在的值,可以赋值成功,并且之后会在该基础上增加 - 修改:alter table _ modify id INT auto_increment
删除:alter table _ modify id INT auto_increment - 5.7中内存中维护一个变量,删除四再添加从5中,服务器重启获取4再添加4
8.0中持久化值,删除4总会加5,会将此时的变量传到日志中
4.外键约束 (foreign key)
①查看约束
- from imformation_schema.table_contraints where table name =‘’
②要求
- 从表字段关联主表字段,主表中字段是primary key,从表中字段是foreign key
- 删除时只能先删除从表,再删除主表
- 外键名可自己声明,外键索引是普通索引
- 删除约束后,也许删除索引
③表级约束
- alter table _ add contrainst _ foreigh key(id) reference _()
④约束等级
- cascade 父表删除 子表同步删除
- set null 父表删除 子表设置null
- no action 子表有记录,父表不允许操作
⑤设置时的建议
- foreign key(id) references dept(id) on update cascade on delect set null
⑥删除外键约束
- alter tablel _ drop foreign key()
- alter table _ drop index
⑦开发场景(不使用外键)
- 外键约束开销慢,更新风暴
- 需要在应用层检查逻辑一致性
5.check约束(检查值得范围)
- 5.7不支持check约束
- 举例使用:salary decimal(10,2) check(salary>2000) 8.0支持check约束
6.default约束(默认值约束)
- salary decimal(10,2) default 2000 不给salary设置值,则后面默认值2000
- 通常设置default 0,防止null值得出现,因为null值出现,专门比较方法不好比较效率不高
7.重要:非空,默认,主键,默认值约束重要
- 主键唯一不需要起别名,其他的可用constraint起别名
- 更改约束: alter table books modify id INT primary key 可以更改其他约束