1. PRIMARY KEY(主键约束)
作用
唯一标识表中的每条记录,确保记录的唯一性且不为空
特点
一个表只能有一个主键,主键字段的值不能重复且不能为NULL
示例
-- 创建表时定义主键 CREATE TABLE students ( id INT PRIMARY KEY, name VARCHAR(50) ); -- 复合主键(多个字段组合作为主键) CREATE TABLE student_courses ( student_id INT, course_id INT, PRIMARY KEY (student_id, course_id) );
2. FOREIGN KEY(外键约束)
作用
用于关联两个表,确保一个表中的数据匹配另一个表中的数据
特点
建立表之间的父子关系,子表的外键值必须匹配父表的主键值或为NULL
示例
-- 父表 CREATE TABLE departments ( dept_id INT PRIMARY KEY, dept_name VARCHAR(50) ); -- 子表(含外键) CREATE TABLE employees ( emp_id INT PRIMARY KEY, emp_name VARCHAR(50), dept_id INT, FOREIGN KEY (dept_id) REFERENCES departments(dept_id) );
3. NOT NULL(非空约束)
作用
确保字段不能存储NULL值
示例
CREATE TABLE users ( id INT PRIMARY KEY, username VARCHAR(50) NOT NULL, email VARCHAR(100) NOT NULL );
4. UNIQUE(唯一约束)
作用
确保字段的值是唯一的,但允许NULL值(一个字段可以有多个NULL)
特点
与主键的区别是,一个表可以有多个UNIQUE约束,且UNIQUE字段允许NULL
示例
CREATE TABLE customers ( id INT PRIMARY KEY, phone VARCHAR(20) UNIQUE, email VARCHAR(100) UNIQUE );
5. CHECK(检查约束)
作用
确保字段的值满足指定的条件
注意
MySQL 8.0.16及以上版本才完全支持CHECK约束
示例
CREATE TABLE products ( id INT PRIMARY KEY, name VARCHAR(50), price DECIMAL(10,2) CHECK (price > 0), stock INT CHECK (stock >= 0) );
6. DEFAULT(默认值约束)
作用
当插入数据时,如果未指定该字段的值,则使用默认值
示例
CREATE TABLE orders ( id INT PRIMARY KEY, order_date DATE DEFAULT CURRENT_DATE(), status VARCHAR(20) DEFAULT 'pending' );
约束的作用总结
1. 保证数据的完整性:防止无效或不合理的数据进入表中
2. 保证数据的一致性:尤其是通过外键约束维护表之间的关系
3. 提高查询性能:主键和唯一约束会自动创建索引
4. 简化应用程序逻辑:数据库层直接处理数据验证,减少应用程序代码