一、约束介绍
约束作用:在建表时给字段添加规则,限制表中数据 ,保证数据的完整性、合法性。
MySQL 常用约束:
not null:非空约束unique:唯一约束primary key:主键约束auto_increment:主键自增- 联合主键(多个字段共同作为主键)
foreign key:外键约束
二、非空约束 not null
规则:被修饰的字段不能为 null,插入数据时必须提供值。
sql
create table user(
id int,
name varchar(20) not null
);
说明:插入数据时 name 不能不赋值,不能写入 null。
三、唯一约束 unique
规则:当前字段所有数据不能重复,允许存在一个 null。
sql
create table user(
id int,
phone varchar(11) unique
);
注意区分:
unique允许 null;主键不允许 null。
四、主键约束 primary key
主键 = 唯一约束 + 非空约束
特点:
- 字段不能重复,不能为 null
- 一张表只能有一个主键
sql
-- 单列主键写法
create table user(
id int primary key,
name varchar(20)
);
主键自增 auto_increment
搭配整数主键使用,新增数据时自动生成递增数字,无需手动赋值。
sql
create table user(
id int primary key auto_increment,
name varchar(20)
);
五、联合主键
概念:多个字段组合在一起共同充当主键
规则:多个字段组合整体不能重复,单独字段可以重复。
一张表依旧只能设置一组主键。
sql
create table student_course(
student_id int,
course_id int,
primary key (student_id, course_id)
);
示例理解:学生id + 课程id联合主键;同一个学生可以选多门课,同一课程可以被多个学生选,但【学生+课程】组合不能重复。
六、外键约束 foreign key
作用:维护多张表之间关联关系,保证引用数据合法。
- 子表(从表):设置外键的表
- 父表(主表):被引用的表,被引用列必须为主键
sql
-- 主表
create table dept(
dept_id int primary key,
dept_name varchar(20)
);
-- 从表,建立外键关联
create table emp(
emp_id int primary key auto_increment,
emp_name varchar(20),
d_id int,
foreign key (d_id) references dept(dept_id)
);
⚠️ 开发重要提示:
互联网项目极少使用外键约束。外键会降低插入、删除性能,线上项目一般在业务代码层面控制关联逻辑。
七、约束对比小结
| 约束 | 关键字 | 是否允许null | 是否允许重复 |
|---|---|---|---|
| 非空约束 | not null |
❌ 不允许 | ✅ 允许重复 |
| 唯一约束 | unique |
✅ 允许1个null | ❌ 不可重复 |
| 主键约束 | primary key |
❌ 不允许 | ❌ 不可重复 |