跳到主要内容

MySQL 零基础入门教程 —— 第四阶段:表结构设计与约束

本阶段你将学习“如何像架构师一样设计数据库表”。

好的表结构可以让系统稳定又高效;坏的表结构会让系统后期崩成一团乱麻。

这是从“会写 SQL”迈向“会设计数据库”的关键一步。


📌 1. 表结构设计的核心思路

一个好的表结构至少应该做到:

  1. 数据不会乱(类型正确、格式一致)
  2. 不会出现重复记录(主键 & 唯一约束)
  3. 表之间关系清晰(外键保证引用正确)
  4. 后期能扩展,不容易崩

为了做到这些,我们需要各种 约束(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 年内不崩。

下一阶段我们将进入最硬核的部分:

性能优化、索引、事务、锁和权限管理

准备好继续进阶的话,告诉我:下一阶段