MySQL 表约束实战指南
设计表结构时,约束是保障数据质量的最后一道防线。它的核心在于通过规则限制非法数据写入,倒逼开发者遵循规范。
1. 非空约束 (NOT NULL)
字段默认允许为 NULL,但实际开发中应尽量避免。因为 NULL 值无法参与运算,且逻辑上容易引发歧义。
NULL 与空字符串的区别:
NULL:表示什么都没有,占位符。'':表示有值,只是内容为空。

2. 默认值约束 (DEFAULT)
这就像 C++ 里的缺省参数。如果插入数据时未指定该列,系统会自动填充默认值。
注意:若未设置 DEFAULT 和 NOT NULL,默认行为是 DEFAULT NULL;一旦设置了 NOT NULL,则不再隐含 DEFAULT NULL。

3. 列描述 (COMMENT)
给字段加注释,方便后续维护。这和代码里的注释是一个道理,别嫌麻烦。

4. 零填充 (ZEROFILL)
这个约束通常配合整数类型使用。比如 INT(10) 加上 ZEROFILL,显示不足 10 位时自动补 0。

5. 主键约束 (PRIMARY KEY)
主键是表的身份证,必须唯一且不能为空。一张表只能有一个主键,通常用整数类型。
删除与添加主键:

复合主键: 可以给多列联合设置主键。只有当这几列的值同时与已有数据相同时,才会触发冲突。

6. 自增约束 (AUTO_INCREMENT)
通常搭配主键使用,作为逻辑主键。不传值时,系统自动取当前最大值 +1。
关键特性:
- 必须是索引(Key 列有值)。
- 必须是整数类型。
- 一张表最多只能有一个自增列。
自定义起始值:

查看最后插入的自增值:

7. 唯一键 (UNIQUE KEY)
主键不能为空,但唯一键可以为 NULL。NULL 不参与计算,所以允许多个 NULL 存在。
一张表可以有多个唯一键,但只能有一个主键。

8. 外键 (FOREIGN KEY)
外键用于定义表与表之间的关系,主要定义在从表上。主表必须有主键或唯一键。
例如班级与学生是一对多关系,学生表中的班级 ID 就是外键。

创建外键时,要求外键列的数据必须在主表的主键列中存在,或者为 NULL。



