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 表开始)

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

相关推荐
小羊没烦恼!5 分钟前
OS X 上使用.NET开发应用程序
开发语言·前端·数据库·人工智能·c#·策略模式
Rain的Java大神之路8 分钟前
[特殊字符]8年Java老兵转型AI Agent:90%的人挂在同一个坑,根本不用学Python!(万字实战复盘,建议收藏)
java·数据库·人工智能·后端·python·spring·ai编程
高级程序源29 分钟前
springboot大学生体测系统72170-计算机课程设计、毕业设计
java·vue.js·spring boot·后端·python·django·课程设计
IT研究室37 分钟前
最新计算机毕业设计选题推荐-基于spring boot的文学名著分享系统-网站-文档指导-Java-springboot
java·spring boot·课程设计
码途行者39 分钟前
缓存一致性难题:Redis 和数据库如何做到数据一致?
数据库·redis
denlaku40 分钟前
JDK 13 新特性详解
java·开发语言
秋饼40 分钟前
Java 后端企业级 LLM 网关实战:Spring Cloud Gateway 构建统一大模型接入层
java·ai·技术分享·后端开发
SelectDB41 分钟前
Doris VARIANT 速查:类型映射、建表写法、索引配置与常见注意点
大数据·数据库·数据分析
今年下半年1 小时前
【防重放】Spring Boot 通过自定义注解实现接口防重放
java·spring boot·自定义注解·防重放
WeiXin_DZbishe1 小时前
基于Node.js的马拉松赛事管理系统的设计与实现-计算机毕设 附源码【课程设计】90211
java·javascript·vue.js·python·php·课程设计