SQL 怎么学(工程实战总纲|用一套用户模型打穿全流程)

一、先把话说清楚

大部分人 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 表开始)

直接带你写接口,不讲废话。

相关推荐
麦聪聊数据19 分钟前
企业数据市场建设(三):API 化服务封装,让数据开箱即用、避免重复开发
数据库
曹牧23 分钟前
文档格式:OFD
java
脱胎换骨-军哥23 分钟前
C++数据库存储引擎内核开发:B+树索引与MVCC并发控制的完整实现
数据库·c++·b树
麦聪聊数据31 分钟前
企业数据市场建设(四):流程闭环与价值运营,让数据市场真正转起来
运维·数据库
正儿八经的少年38 分钟前
redis 的大 key 和热 key 详解
数据库·redis·缓存
AI砖家42 分钟前
多智能体系统实战:架构设计、数据库表设计与 Skill 体系
数据库·多智能体·skill·agent架构设计·agengt
豆角焖肉1 小时前
Maven进阶与搭建私服
java·maven
大不点wow1 小时前
Java序列化与反序列化:让对象走出JVM
java·开发语言·jvm
噢,我明白了1 小时前
Java中日期和字符串的处理
java·开发语言·日期
dkbnull1 小时前
Spring Boot请求处理组件对比详解
java·spring boot