MySQL约束
MySQL 约束详解:保障数据完整性的六大机制
约束(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。
CREATE TABLE student (
id INT,
name VARCHAR(50) NOT NULL, -- 姓名不能为空
age INT NOT NULL DEFAULT 0 -- 年龄不能为空,默认值为 0
);
-- 插入数据时未指定 name 会报错
INSERT INTO student (id) VALUES (1); -- 错误:Column 'name' cannot be null
2. DEFAULT(默认约束)
为字段设置默认值,简化插入操作(未指定字段时自动填充)。
CREATE TABLE employee (
id INT,
name VARCHAR(50) NOT NULL,
department VARCHAR(30) DEFAULT '未知部门', -- 默认部门
hire_date DATE DEFAULT CURRENT_DATE() -- 默认值为当前日期
);
-- 插入时未指定 department 和 hire_date,将使用默认值
INSERT INTO employee (id, name) VALUES (1, '张三');
-- 结果:department 为 '未知部门',hire_date 为插入当天日期
3. PRIMARY KEY(主键约束)
主键是表的 “唯一标识符”,具有以下特性: