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. 批量操作优先,减少往返成本
相关推荐
风翼靓崽15 分钟前
centos7以mysql为例自建yum源
数据库·mysql·adb
码农阿豪31 分钟前
MongoDB迁移到金仓数据库:商品属性继续灵活存,订单报表交给 SQL
数据库·sql·mongodb
秋饼34 分钟前
Redis 全面解析:从数据结构到主从/哨兵/集群、分布式锁与面试高频考点,代码到原理一次讲透
数据库·redis·分布式·面试·后端开发
秋名RG1 小时前
一条 SQL 语句在 MySQL 中的执行过程详解
数据库·sql·mysql
Canmag 兴隆磁性1 小时前
钕铁硼磁片取向方向检测自动化方案:从人工目检到流水线在线分选的工程实践
运维·数据库·自动化·工业自动化·钕铁硼·自动化检测·磁材料
月夏1 小时前
一个汉字存成了 6 个字节:我用 HEX 揪出 MySQL 双重编码
mysql·docker·全栈
yangmu32031 小时前
安全审批与日志审计:从“谁批准”到“谁执行”的全链路闭环
数据库
R²AIN SUITE1 小时前
多云或私有云环境怎么选项目管理工具?RainSuite等5种产品的8项部署验证
服务器·网络·数据库
隔振降噪研究员1 小时前
裁断机一响,楼板为什么会跟着抖?
大数据·linux·数据库·人工智能
软件派2 小时前
生产动态数据智能风控:阈值判别、趋势预测、异常识别算法工程落地实战
前端·数据库·算法