mysql中的约束有哪些_mysql表约束类型解析

来源:这里教程网 时间:2026-02-28 20:52:09 作者:

MySQL 中的约束是保障数据质量的核心机制,直接作用于表字段或整张表,用来强制执行业务规则、防止脏数据入库。常见的约束类型有六种,各自用途明确,搭配使用能大幅提升数据可靠性。

主键约束(PRIMARY KEY)

主键是一行记录的唯一标识,要求该字段值非空且唯一。一张表只能有一个主键,但可以由单个字段(如 id)或多个字段联合构成(复合主键)。主键会自动创建索引,提升查询效率。

创建时定义:
id INT PRIMARY KEY
PRIMARY KEY(id)
支持自增:
id INT PRIMARY KEY AUTO_INCREMENT
,常用于逻辑主键
复合主键示例:
PRIMARY KEY(user_id, order_date)
,表示组合值不能重复

外键约束(FOREIGN KEY)

外键用于建立两张表之间的关联关系,确保从表中某字段的值必须存在于主表对应字段(通常是主键)中,从而维护引用完整性。使用前需确保主表已存在,且字段类型、字符集完全一致。

建表时添加:
FOREIGN KEY (user_id) REFERENCES users(id)
注意:InnoDB 引擎支持外键,MyISAM 不支持 外键字段可为空,但若非空,则值必须在主表中存在

非空约束(NOT NULL)与唯一约束(UNIQUE)

非空约束强制字段不允许插入 NULL 值;唯一约束则保证字段值在整个表中不重复(但允许一个或多个 NULL——因为 NULL ≠ NULL)。

两者可单独使用,也可组合:
username VARCHAR(32) NOT NULL UNIQUE
唯一约束也会自动创建索引,适合做高频查询条件(如邮箱、手机号) 一个表可有多个唯一约束,不限于主键

默认约束(DEFAULT)与检查约束(CHECK)

DEFAULT 为字段设定默认值,插入时未显式提供该列值即自动填充;CHECK 用于校验字段值是否满足指定表达式(如

age >= 0
),但注意:MySQL 5.7 及更早版本解析 CHECK 语法但不生效,8.0.16+ 才真正支持并强制执行

默认值写法:
status TINYINT DEFAULT 1
,支持常量、函数(如
CURRENT_TIMESTAMP
CHECK 示例:
CHECK (price > 0 AND price 
替代方案:低版本可用触发器或应用层校验兜底

相关推荐