MySQL 常用业务 SQL

这篇更贴近"日常写业务"的 SQL,不讲理论,强调能直接拿去改。

一、按时间范围的常用查询

sql 复制代码
-- 最近 7 天订单
SELECT *
FROM orders
WHERE create_time >= NOW() - INTERVAL 7 DAY;

-- 指定日期
SELECT *
FROM orders
WHERE create_time >= '2026-04-01 00:00:00'
  AND create_time <  '2026-04-02 00:00:00';

二、状态机更新(防止重复更新)

sql 复制代码
-- 只允许从 UNPAID -> PAID
UPDATE orders
SET status = 'PAID', pay_time = NOW()
WHERE id = ? AND status = 'UNPAID';

三、库存扣减(防止超卖)

sql 复制代码
UPDATE stock
SET quantity = quantity - 1
WHERE sku_id = ? AND quantity > 0;

配套判断:受影响行数为 0 就表示库存不足。


四、批量更新(避免一条条改)

sql 复制代码
UPDATE user
SET status = 'DISABLED'
WHERE last_login < NOW() - INTERVAL 180 DAY;

五、存在即更新(UPSERT)

sql 复制代码
INSERT INTO user_profile (user_id, nickname, avatar)
VALUES (?, ?, ?)
ON DUPLICATE KEY UPDATE
nickname = VALUES(nickname),
avatar = VALUES(avatar);

六、批量插入(提高吞吐)

sql 复制代码
INSERT INTO audit_log (user_id, action, create_time)
VALUES
  (101, 'LOGIN', NOW()),
  (102, 'LOGIN', NOW()),
  (103, 'LOGIN', NOW());

七、分页查询(业务常规)

sql 复制代码
-- 传统分页(页数不大可用)
SELECT id, user_id, status, create_time
FROM orders
ORDER BY create_time DESC
LIMIT 0, 20;
sql 复制代码
-- 游标分页(更稳)
SELECT id, user_id, status, create_time
FROM orders
WHERE (create_time < ? OR (create_time = ? AND id < ?))
ORDER BY create_time DESC, id DESC
LIMIT 20;

八、模糊搜索(建议加前缀)

sql 复制代码
-- 前缀匹配可用索引
SELECT * FROM user WHERE nickname LIKE '张%';

%张% 这种全模糊通常走不到索引。


九、查重(业务常用)

sql 复制代码
SELECT email, COUNT(*) AS cnt
FROM user
GROUP BY email
HAVING cnt > 1;

十、取某用户最新一条记录

sql 复制代码
SELECT *
FROM login_log
WHERE user_id = ?
ORDER BY create_time DESC
LIMIT 1;

十一、报表类统计(按天聚合)

sql 复制代码
SELECT DATE(create_time) AS day, COUNT(*) AS cnt
FROM orders
WHERE create_time >= NOW() - INTERVAL 30 DAY
GROUP BY day
ORDER BY day;

十二、快速排除无效数据

sql 复制代码
SELECT *
FROM orders
WHERE status IN ('PAID', 'SHIPPED')
  AND deleted = 0;

最后总结

这类业务 SQL 的核心是三点:

  1. 写法清晰、能命中索引
  2. 更新条件有约束,避免重复或越界
  3. 批量操作优先,减少往返成本
相关推荐
2301_781571421 天前
Golang格式化输出占位符都有什么_Golang fmt占位符教程【通俗】
jvm·数据库·python
养肥胖虎1 天前
RAG学习笔记(3):区分数据库检索与RAG的使用场景
数据库·ai·rag
_ku_ku_1 天前
数据库系统原理 · 数据库应用开发 · 自学总结
数据库
长谷深风1111 天前
索引提速秘籍【个人八股】
mysql·b+树·索引·索引设计原则·存储引擎优化·索引维护成本·字段选择策略
No8g攻城狮1 天前
【人大金仓】wsl2+ubuntu22.04安装人大金仓数据库V9
java·数据库·spring boot·非关系型数据库
山峰哥1 天前
SQL慢查询调优实战:从全表扫描到索引覆盖的完整复盘
前端·数据库·sql·性能优化
Irene19911 天前
在 WSL 中下载安装 MySQL,连接到 SQLyog(MySQL 安装在 WSL vs Windows 本地对比)
mysql·wsl
代码中介商1 天前
Redis入门:5大数据类型全解析
数据库·redis·缓存
渣渣盟1 天前
数据库设计范式详解(纯小白版)
数据库·oracle·软考·数据库工程师
夜雪闻竹1 天前
Cursor 对话导入:解析 SQLite 里的宝藏
数据库·sqlite·ai编程