一、先把话说清楚
大部分人 SQL 学不会,不是因为难,而是因为:
- 学的是语法,不是业务
- 会写 SELECT,不会写接口
- 会 JOIN,不知道怎么落到项目
👉 本质问题:
❗ 没有"主线案例"
二、这套专栏的核心思路
这套 SQL 系列只做一件事:
用一套用户模型,打穿 SQL 全流程
三、核心案例(三张表)
整个系列只围绕这三张表展开:
1️⃣ user(用户主表)
sql
CREATE TABLE user (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(64) NOT NULL UNIQUE,
password VARCHAR(128) NOT NULL,
create_time DATETIME DEFAULT CURRENT_TIMESTAMP,
update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
👉 作用:
存登录信息(账号体系核心)
2️⃣ user_detail(用户详情表)
sql
CREATE TABLE user_detail (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
user_id BIGINT NOT NULL UNIQUE,
real_name VARCHAR(50),
phone VARCHAR(20),
email VARCHAR(100),
gender TINYINT DEFAULT 0,
birthday DATE,
create_time DATETIME DEFAULT CURRENT_TIMESTAMP,
update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
👉 作用:
存用户扩展信息(资料、属性)
3️⃣ user_address(用户地址表)
sql
CREATE TABLE user_address (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
user_id BIGINT NOT NULL,
receiver_name VARCHAR(50),
phone VARCHAR(20),
province VARCHAR(50),
city VARCHAR(50),
district VARCHAR(50),
detail_address VARCHAR(200),
is_default TINYINT DEFAULT 0,
create_time DATETIME DEFAULT CURRENT_TIMESTAMP,
update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
👉 作用:
存用户收货地址(一个用户多个地址)
四、三张表关系(核心理解)
user 1 ------ 1 user_detail
user 1 ------ N user_address
为什么这样设计?
👉 因为:
账号信息 ≠ 用户资料 ≠ 地址信息
拆表后:
- 结构清晰
- 扩展性强
- 符合企业设计
五、SQL 学习主线(围绕这三张表)
第1阶段:CRUD(操作 user)
你要做到:
注册用户
查询用户
删除用户
👉 SQL:
sql
INSERT INTO user(...)
SELECT * FROM user WHERE id = ?
第2阶段:建表(理解结构)
你要搞懂:
- 为什么要有 id
- 为什么 username 要 UNIQUE
- 为什么有 create_time
🔗 第3阶段:表关系(拆表能力)
你要搞懂:
user_id 是干嘛的?
关键:
user_detail.user_id UNIQUE → 一对一
user_address.user_id 可重复 → 一对多
第4阶段:JOIN(业务查询)
你要会写:
sql
SELECT
u.username,
d.real_name,
a.receiver_name
FROM user u
LEFT JOIN user_detail d ON u.id = d.user_id
LEFT JOIN user_address a ON u.id = a.user_id;
👉 这一步开始做"真实接口"
第5阶段:项目落地(企业重点)
SQL 不再单独存在,而是进入分层:
Controller
↓
Service(事务 + 缓存)
↓
QueryMapper(JOIN)
↓
Mapper(CRUD)
👉 企业实践:
- MyBatis-Plus → 单表 CRUD
- XML → 联表查询
- Service → 业务 + 事务
- Converter → 对象转换
第6阶段:索引(性能基础)
围绕这三张表:
username → 唯一索引
user_id → 普通索引
👉 目标:
让查询更快
六、你必须这样学(重点)
写接口 → 不会SQL → 补SQL → 回来继续写
❌ 错误方式:
背语法
刷题
看教程
七、你学完能达到什么水平?
你应该能做到:
✔ 用户注册(多表 + 事务)
✔ 用户详情(JOIN 查询)
✔ 地址列表(多表)
✔ Mapper 分层设计
✔ 基础索引优化
👉 这就是:
企业可用级 SQL 能力
八、最终一句话总结
❗ SQL 不难
难的是:你有没有一套"表结构 + 关系 + 查询 + 项目"的完整链路
九、下一篇
👉 第1篇:CRUD 实战(从 user 表开始)
直接带你写接口,不讲废话。