MySQL 零基础入门教程 —— 第四阶段:表结构设计与约束
本阶段你将学习“如何像架构师一样设计数据库表”。
好的表结构可以让系统稳定又高效;坏的表结构会让系统后期崩成一团乱麻。
这是从“会写 SQL”迈向“会设计数据库”的关键一步。
📌 1. 表结构设计的核心思路
一个好的表结构至少应该做到:
- 数据不会乱(类型正确、格式一致)
- 不会出现重复记录(主键 & 唯一约束)
- 表之间关系清晰(外键保证引用正确)
- 后期能扩展,不容易崩
为了做到这些,我们需要各种 约束(Constraints)。
MySQL 常见约束:
PRIMARY KEY主键AUTO_INCREMENT自动编号NOT NULL不能为空UNIQUE唯一DEFAULT默认值CHECK检查条件(MySQL 8 支持)FOREIGN KEY外键,关联其他表
下面逐个讲解。
📌 2. 主键(PRIMARY KEY)—— 表的身份证
每张表必须明确:靠什么来唯一标识一行数据?
最常见方式:自增 id:
id INT PRIMARY KEY AUTO_INCREMENT
主键作用:
- 保证数据不重复
- 查询效率更高
- 方便 JOIN
示例:创建带主键的用户表
CREATE TABLE users (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50)
);
📌 3. 非空约束(NOT NULL)
用于保证字段“必须有值”。
例如用户 email 必须填写:
email VARCHAR(100) NOT NULL
如果插入 NULL,会报错。
📌 4. 唯一约束(UNIQUE)—— 防止重复
常用于:手机号、邮箱、用户名。
email VARCHAR(100) UNIQUE
示例:
INSERT INTO users (email) VALUES ('a@test.com'); -- 成功
INSERT INTO users (email) VALUES ('a@test.com'); -- 报错(重复)
📌 5. 默认值(DEFAULT)
用于设置字段的默认内容。
例如创建时间:
created_at DATETIME DEFAULT NOW()
例如默认年龄:
age INT DEFAULT 18
📌 6. 检查约束(CHECK)—— 限制字段范围
例如用户年龄必须在 0~150:
age INT CHECK (age >= 0 AND age <= 150)
注意:MySQL 8 才真正支持 CHECK。
📌 7. 外键(FOREIGN KEY)—— 保证两张表的关系正确
外键用于保证:引用别的表的数据必须存在。
继续使用第三阶段的订单表:
CREATE TABLE orders (
id INT PRIMARY KEY AUTO_INCREMENT,
user_id INT,
amount DECIMAL(10,2),
order_time DATETIME,
FOREIGN KEY (user_id) REFERENCES users(id)
);
外键做的事情:
- 防止插入不存在的 user_id
- 防止删除有订单的用户(除非设定级联)
外键能让数据更安全,但在高并发系统中,有时会被关闭(改用应用层来保证)。
📌 8. 表结构修改(ALTER TABLE)
实际业务中常常会修改字段。
添加字段
ALTER TABLE users ADD age INT;
删除字段
ALTER TABLE users DROP COLUMN age;
修改字段类型
ALTER TABLE users MODIFY age SMALLINT;
重命名字段
ALTER TABLE users RENAME COLUMN age TO user_age;
添加唯一约束
ALTER TABLE users ADD UNIQUE (email);
📌 9. 表的三大范式(入门理解版)
“范式”是设计表结构的原则,简单理解如下:
第一范式:字段必须是最小颗粒度
不能把多条信息塞进一个字段里。
- ❌ address = "中国-广东-广州-天河"
- ✔ 拆成 country / province / city / district
第二范式:每列都必须依赖主键
与主键无关的字段不要放在这张表里。
第三范式:不能有重复信息
例如商品表里不应该重复存“分类名称”,分类应该单独建表。
你只要记住一句话:
一个字段只做一件事,一个表只讲一类信息。
📌 10. 小结
本阶段你掌握了:
- 如何设计表结构
- 各类约束(PRIMARY KEY, UNIQUE, NOT NULL…)
- 外键及关联设计
- ALTER TABLE 表结构修改
- 数据库范式(简易理解)
这些内容决定了一个系统能否在未来 3 年内不崩。
下一阶段我们将进入最硬核的部分:
性能优化、索引、事务、锁和权限管理
准备好继续进阶的话,告诉我:下一阶段。