约束(Constraint)是 MySQL 中用于限制表中数据的规则,通过强制数据满足特定条件,确保数据库的完整性、一致性和准确性。MySQL 支持六大类约束,虽然部分约束在实现上有局限,但仍是设计可靠数据表的核心工具。
六大约束类型及作用
约束类型
作用描述
MySQL 支持情况
NOT NULL
限制字段值不能为 NULL(必须填写)。
完全支持
DEFAULT
为字段设置默认值,当插入数据时未指定该字段则使用默认值。
完全支持
PRIMARY KEY
主键约束,唯一标识表中的每行记录,要求字段值唯一且非空。
完全支持(单字段或复合主键)
UNIQUE
唯一约束,保证字段值在表中唯一,但允许为 NULL(NULL 可重复)。
完全支持
CHECK
检查约束,限制字段值必须满足指定条件(如 age > 0)。
MySQL 8.0.16+ 支持,低版本仅语法兼容但不生效
FOREIGN KEY
外键约束,限制两个表的关系,确保从表字段值必须来自主表的关联字段。
支持,但需存储引擎为 InnoDB(MyISAM 不支持)
约束的使用方法
1. NOT NULL(非空约束)
确保字段必须有值,禁止插入 NULL。
1 2 3 4 5 6 7 8
CREATE TABLE student ( id INT, name VARCHAR(50) NOT NULL, -- 姓名不能为空 age INTNOT NULLDEFAULT0-- 年龄不能为空,默认值为 0 );
-- 插入数据时未指定 name 会报错 INSERT INTO student (id) VALUES (1); -- 错误:Column 'name' cannot be null
2. DEFAULT(默认约束)
为字段设置默认值,简化插入操作(未指定字段时自动填充)。
1 2 3 4 5 6 7 8 9 10
CREATE TABLE employee ( id INT, name VARCHAR(50) NOT NULL, department VARCHAR(30) DEFAULT'未知部门', -- 默认部门 hire_date DATEDEFAULTCURRENT_DATE() -- 默认值为当前日期 );
-- 插入时未指定 department 和 hire_date,将使用默认值 INSERT INTO employee (id, name) VALUES (1, '张三'); -- 结果:department 为 '未知部门',hire_date 为插入当天日期
3. PRIMARY KEY(主键约束)
主键是表的 “唯一标识符”,具有以下特性:
一个表只能有一个主键(可由多个字段组成复合主键)。
主键字段值必须唯一且非空。
主键会自动创建索引,提升查询效率。
示例 1:单字段主键
1 2 3 4
CREATE TABLEuser ( id INTPRIMARY KEY, -- 主键约束(id 唯一且非空) username VARCHAR(50) NOT NULL );