目录
🎯 什么是 Constraint?
MySQL 中常见的约束类型:
1. PRIMARY KEY
2. FOREIGN KEY
3. UNIQUE
4. NOT NULL
5. DEFAULT
6. CHECK(MySQL 8.0+)
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
约束。
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)
);