1. 数据库约束的本质与价值
在数据库管理系统中,约束(Constraint)是保证数据完整性的核心机制。作为MySQL数据库的基石功能,约束通过预定义的规则系统,自动维护数据间的逻辑关系与业务规则。我在实际项目中见过太多由于约束缺失导致的数据混乱案例——重复的会员注册信息、违反业务逻辑的订单金额、不存在的部门编号等,这些问题往往在系统运行数月后才会暴露,修复成本极高。
约束机制的价值主要体现在三个维度:
- 数据准确性:防止无效或不符合业务规则的数据进入系统
- 关系可靠性:确保表间关联始终有效(如外键约束)
- 开发效率:将数据验证逻辑下沉到数据库层,减少应用层重复代码
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. MySQL五大核心约束详解
2.1 非空约束(NOT NULL)
最基本的约束类型,强制字段必须有值。在用户注册场景中,用户名和密码字段必须设置为NOT NULL:
sql复制CREATE TABLE users (
user_id INT AUTO_INCREMENT,
username VARCHAR(50) NOT NULL,
password CHAR(60) NOT NULL, -- 推荐使用Bcrypt加密存储
PRIMARY KEY (user_id)
);
注意:NOT NULL字段在INSERT时若未指定值,MySQL会根据sql_mode配置采取不同行为。建议始终设置严格的SQL模式:
sql复制SET sql_mode = 'STRICT_TRANS_TABLES';
2.2 唯一约束(UNIQUE)
保证字段值在表内不重复,常用于手机号、邮箱等业务唯一标识。与主键不同,UNIQUE允许NULL值(除非同时设置了NOT NULL):
sql复制ALTER TABLE employees
ADD CONSTRAINT uk_employee_email
UNIQUE (email);
复合唯一约束示例:
sql复制CREATE TABLE class_schedule (
class_id INT,
week_day TINYINT CHECK (week_day BETWEEN
