Skip to content

约束

1. 约束概述

1.1 分类:

约束描述关键字
非空约束限制该字段的数据不能为 nullNOT NULL
唯一约束保证该字段的所有数据都是唯一、不重复的UNIQUE
主键约束主键是一行数据的唯一标识,要求非空且唯一PRIMARY KEY
默认约束保存数据时,如果未指定该字段,则采用默认值DEFAULT
检查约束(>=8.0.16)保证字段值满足某一个条件CHECK
外键约束用来让两张表建立连接,保证数据的一致性和完整性FOREIGN KEY

约束是作用于表中字段上的,可以在创建表/修改表的时候添加约束

2. 根据需求,完整表结构的创建

字段名字段含义字段类型约束条件约束关键字
idID 唯一标识int主键,并且自动增长primary key,auto_increment
name姓名varchar(10)不为空且唯一not null, unique
age年龄int大于 0,且小于等于 120check
status状态char(1)如果没有指定该值,默认值为 1default
gender性别char(1)
sql
create table user(
    id int primary key auto_increment comment 'id主键',
    name varchar(10) not null unique comment '姓名',
    age int check(age>0 and age<=120) comment '年龄',
    `status` char(1) default '1' comment '状态',
    gender char(1) comment '性别'
)comment '用户表'

3. 外键约束

3.1 语法

在创建表时添加外键

sql
create table 表名(
    字段名 数据类型,
    ...,
    [constraint] [外键名称] foreign key (外键字段名) 主表(主表列名)
);

在表创建后添加:

sql
alter table 表名 add constraint 外键名称 foreign key (外键字段名) references 主表(主表列名);

删除外键

sql
alter table 表名 drop foreign key 外键名称;

3.2 示例

sql
alter table emp add constraint fk_emp_dept_id foreign key (dept_id) references dept(id);

4. 外键删除更新行为

4.1 删除/更新行为

行为说明
NO ACTION当父表中删除/更新对应记录时,首先检查该记录是否有外键,如果有则不允许删除/更新。(与RESTRICT一致)
RESTRICT当父表中删除/更新对应记录时,首先检查该记录是否有外键,如果有则不允许删除/更新。(与NO ACTION一致)
CASCADE当父表中删除/更新对应记录时,首先检查该记录是否有外键,如果有,则也修改外键在子表中的记录
SET NULL当父表中删除对应记录时,首先检查该记录是否有外键,如果有则设置子表中该外键的记录为NULL
SET DEFAULT父表有变更时,字表将外键列设置成一个默认的值(Innodb不支持)

4.2 语法

sql
ALTER TABLE 表名 
ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段) 
REFERENCES 主表名(主表字段名) 
ON UPDATE CASCADE ON DELETE CASCADE;