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