数据库设计里,约束(Constraint)是保证数据准确性的核心手段。它的本质是通过技术手段倒逼开发者插入正确的数据,从而维护数据的完整性。
一、非空约束 (NOT NULL)
字段默认允许为 NULL,但在实际开发中,应尽可能避免使用 NULL。因为 NULL 在运算和统计时行为特殊,容易导致逻辑错误。
这里需要区分 NULL 和空字符串 '':
NULL:表示'什么都没有',是一个缺失值。'':表示'有值,但是内容为空'。
-- 定义一个不允许为空的字段
CREATE TABLE users (
id INT NOT NULL,
name VARCHAR(50) NOT NULL
);
二、默认值约束 (DEFAULT)
DEFAULT 类似于 C++ 中的缺省值。如果插入数据时未指定该列的值,系统将自动填入默认值。
注意:如果表中既没有设置 DEFAULT 也没有设置 NOT NULL,系统默认行为是 DEFAULT NULL。一旦设置了 NOT NULL,则不再隐含 DEFAULT NULL。
-- 设置默认状态为 1
status TINYINT DEFAULT 1 NOT NULL;
三、列描述 (COMMENT)
给字段添加注释,方便后续维护和文档生成。这跟代码里的注释类似,属于元数据。
COMMENT '用户昵称';
四、零填充 (ZEROFILL)
ZEROFILL 通常配合 INT 类型使用。它主要用于显示格式,当数字长度不足指定宽度时,前面补 0。
注:新版 MySQL 中此功能已逐渐废弃,建议仅在特定展示需求下使用。
-- 总长度为 10,不足补 0
age INT(10) ZEROFILL;
五、主键约束 (PRIMARY KEY)
主键是表的唯一标识,必须满足两个条件:唯一且非空。一张表中只能有一个主键,通常由整数类型的列构成。
1. 复合主键
主键可以包含多列。只有当所有组成主键的列同时重复时,才会触发冲突。
-- 联合主键
PRIMARY KEY (user_id, order_id);


