MySQL约束知识点
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. 简化应用程序逻辑:数据库层直接处理数据验证,减少应用程序代码