目录
[🎯 什么是 Constraint?](#🎯 什么是 Constraint?)
[MySQL 中常见的约束类型:](#MySQL 中常见的约束类型:)
[1. PRIMARY KEY](#1. PRIMARY KEY)
[2. FOREIGN KEY](#2. FOREIGN KEY)
[3. UNIQUE](#3. UNIQUE)
[4. NOT NULL](#4. NOT NULL)
[5. DEFAULT](#5. DEFAULT)
[6. CHECK(MySQL 8.0+)](#6. CHECK(MySQL 8.0+))
[7. AUTO_INCREMENT](#7. AUTO_INCREMENT)
🎯 什么是 Constraint?
Constraint(约束) 是你在创建表时指定的一组规则,用于限制字段中允许的值,以防止无效、重复或不一致的数据写入数据库。
MySQL 中常见的约束类型:
约束类型 | 作用描述 |
---|---|
PRIMARY KEY |
标识表中唯一的记录(不能重复,不能为 NULL) |
FOREIGN KEY |
保证两个表之间的引用一致性(建立关联) |
UNIQUE |
限制某列中的值不能重复 |
NOT NULL |
限制字段值不能为空 |
DEFAULT |
给字段设置默认值 |
CHECK |
限制字段值必须满足指定的逻辑表达式(MySQL 8.0+ 才正式支持) |
AUTO_INCREMENT |
自动生成唯一的整数(通常用于主键) |
1. PRIMARY KEY
-
用于唯一标识表中每一行记录;
-
通常只设置一个主键;
-
自动包含
NOT NULL
和UNIQUE
约束。
sql
CREATE TABLE students (
student_id INT PRIMARY KEY,
name VARCHAR(100)
);
2. FOREIGN KEY
-
建立两个表之间的联系;
-
确保外键列中的值在父表中必须存在。
sql
CREATE TABLE courses (
course_id INT PRIMARY KEY,
course_name VARCHAR(100)
);
CREATE TABLE enrollments (
student_id INT,
course_id INT,
FOREIGN KEY (course_id) REFERENCES courses(course_id)
);
3. UNIQUE
-
限制某列中的值不能重复;
-
不限制 NULL 值(NULL 不视为"重复")。
sql
CREATE TABLE users (
user_id INT PRIMARY KEY,
email VARCHAR(100) UNIQUE
);
4. NOT NULL
-
防止列接受 NULL 值;
-
常用于业务关键字段,如姓名、价格等。
sql
CREATE TABLE products (
product_id INT PRIMARY KEY,
name VARCHAR(100) NOT NULL
);
5. DEFAULT
- 如果插入时未指定该列的值,则自动填入默认值。
sql
CREATE TABLE orders (
order_id INT PRIMARY KEY,
status VARCHAR(20) DEFAULT 'pending'
);
6. CHECK
(MySQL 8.0+)
-
验证列值是否满足条件;
-
在旧版本中会忽略,不生效。
sql
CREATE TABLE employees (
emp_id INT PRIMARY KEY,
age INT CHECK (age >= 18)
);
7. AUTO_INCREMENT
-
自动为每一行生成唯一编号;
-
常和主键一起使用。
sql
CREATE TABLE customers (
customer_id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100)
);