摘要:别急,今天我把我犯过的 10 条最常见、最隐蔽、最气人的 SQL 漏洞,配上10 句一看就懂、一背就会的口诀,做成一份“防踩雷手册”。
"
“为什么我的 SQL 又报错?”
“为什么上线后慢成 PPT?”
“为什么我写的查询永远跑不出想要的结果?”
别急,今天我把我犯过的 10 条最常见、最隐蔽、最气人的 SQL 漏洞,配上10 句一看就懂、一背就会的口诀,做成一份“防踩雷手册”。
收藏这一篇,下次写 SQL 直接抄答案!
10 条口诀
01 标点符号篇
❌ 把中文逗号、引号混进代码
✅ 口诀:写完先数逗号,最后一列后面不要逗号;日期一定用英文单引号!
02 日期时间篇
❌ `'2025-07-01'` 当整天用,漏掉 00:00:00 之后的记录
✅ 口诀:想包整天,右端加 23:59:59;或者
03 JOIN 家族篇
❌ INNER / LEFT / RIGHT 随手点,数据丢到哭
✅ 口诀:INNER 是交集,LEFT 是全家福;记住“全家”可能多出 NULL
04 聚合分组篇
❌ GROUP BY 当排序用,SELECT 里混进非聚合列
✅ 口诀:GROUP BY 的列,SELECT 里必须露脸(除非它在聚合里)
✅ 再记一句:分组用 GROUP BY,排序用 ORDER BY,别混!
05 过滤顺序篇
❌ WHERE / HAVING 傻傻分不清
✅ 口诀:WHERE 先筛行,HAVING 再筛组;顺序颠倒,SQL 就罢工
06 NULL 黑洞篇
❌ `NULL = '某值'` 永远得不到 TRUE
✅ 口诀:NULL 是黑洞,任何比较都会掉进去;用 IS NULL / IS NOT NULL 捞人
07 函数大小写篇
❌ `UNIXtime_TIMESTAMP`、`FROM_UNIXTIME` 随手拼
✅ 口诀:函数名背三个就够——UNIX_TIMESTAMP、FROM_UNIXTIME、NOW
08 长 SQL 可读性篇
❌ 一口气写 200 行,报错找不到北
✅ 口诀:长 SQL 分三段——SELECT、FROM、WHERE,每段写完回车对齐
✅ 再记一句:每次改动后立刻 `LIMIT 10` 试跑,确认 OK 再去掉 LIMIT
09 索引 & 性能篇
❌ 先写 SQL 后想索引,上线后慢成狗
✅ 口诀:索引先建好;EXPLAIN 是地图,跑之前先看路线,省得堵车
✅ 再记一句:type=ALL 就红灯——全表扫描等于翻遍整仓库
10 思维模型篇
❌ 把表想成一张纸,JOIN 想成复制粘贴
✅ 口诀:把三张表想成三个 Excel 工作表,JOIN 就是按主键复制粘贴
✅ 再记一句:子查询超过两层,先写成临时表(WITH 语句),可读性翻倍
02 一张图带走所有口诀
03 彩蛋:三条万能模板
1.统计每天
sqlSELECT DATE(create_time) AS d, COUNT(*) AS cntFROM ordersGROUP BY d;2. 区间计数
sqlSELECT COUNT(*)FROM ordersWHERE create_time BETWEEN '2025-07-01 00:00:00' AND '2025-07-01 23:59:59';3. 临时表简化嵌套
sqlWITH tmp AS ( SELECT user_id, SUM(amount) AS total FROM orders WHERE create_time >= '2025-07-01' GROUP BY user_id)SELECT * FROM tmp WHERE total > 1000;最后,把这句话贴在电脑上:
“报错先看第一行,英文提示就是答案。”
祝你从此写 SQL 不踩坑,性能飞起!
来源:心平氣和