MySQL 表约束详解:从基础到实战
在数据库设计中,数据类型只是第一道防线。真正保证数据质量、防止脏数据入库的,是表的约束(Constraints)。它们像一套隐形的规则,强制程序写入符合预期的数据。
为什么需要表约束?
单纯依靠数据类型(如 INT, VARCHAR)有时是不够的。比如 INT 能限制范围,但无法阻止你插入逻辑上错误的值(如年龄为负数)。约束机制就是为了解决这类问题,通过技术手段倒逼开发者输入正确数据。站在数据库的角度,凡是成功存入的数据,都必须满足所有定义的约束条件。
常见约束类型
非空约束 (NOT NULL)
默认情况下,字段允许为 NULL。如果业务要求某项信息必须存在(例如用户名),就需要设置 NOT NULL。
CREATE TABLE users (
id INT,
name VARCHAR(50) NOT NULL
);
执行 DESC users 可以看到 Null 列显示为 NO。尝试插入 NULL 值时,MySQL 会直接拦截并报错。
默认值 (DEFAULT)
当某个字段经常使用固定值时,可以设置默认值。这类似于函数参数中的缺省值,不传参时使用预设值。
CREATE TABLE orders (
id INT,
status VARCHAR(20) DEFAULT 'pending'
);
插入数据时若未指定 status,系统会自动填入 'pending'。
注意:
NOT NULL和DEFAULT并不冲突,而是互补。NOT NULL禁止显式传入空值,而DEFAULT在不传值时提供兜底。两者常结合使用:column_type NOT NULL DEFAULT value。
列描述 (COMMENT)
用于记录字段的业务含义,方便后续维护。它不会改变数据行为,仅作为元数据保存。
CREATE TABLE products (
price DECIMAL(10,2) COMMENT '商品单价'
);
查看描述需使用 SHOW CREATE TABLE,DESC 命令通常不显示注释内容。
零填充 (ZEROFILL)
主要用于整数显示格式。开启后,不足宽度的数字会在左侧自动补零。
CREATE TABLE numbers (
a ZEROFILL()
);


