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. 批量操作优先,减少往返成本
相关推荐
风哥2号8 分钟前
华为高斯数据库恢复工具FGOGDU(FGEDU openGauss DUL)
数据库·opengauss·华为高斯
小蒜学长16 分钟前
springboot党建云课堂学习与管理系统(代码+数据库+LW)
java·数据库·spring boot·后端·学习
2601_9621803316 分钟前
FlinkCDC 实现 MySQL 数据变更实时同步
数据库·mysql
2601_9621896020 分钟前
深入浅出MySQL:概述与体系结构解析
数据库·mysql
Gain_chance26 分钟前
大数据毕业设计实战|Data Insight Platform:用 FastAPI + ClickHouse 打造低门槛全链路数据洞察平台
大数据·数据库·clickhouse·毕业设计·fastapi
harmony&1 小时前
ETCD 存储系统实战:从单节点部署到 Kubernetes 高可用集群
数据库·kubernetes·etcd
2601_962066491 小时前
【玩转全栈】----Django模板的继承
数据库·django·sqlite
一只小bit2 小时前
Redis哨兵机制、主从复制与集群搭建与维护
数据库·redis·bootstrap
zlwool9 小时前
图纸管理选型避坑指南
数据库·erp·设备erp·非标机械
小灰灰搞电子10 小时前
完全驾驭 Qt 与数据库:C++ ORM 框架 QxOrm 原理与实践指南
数据库·c++·qt