第 7 课

常见 SQL 错误

避免意外交叉 JOIN、NULL 陷阱、错误时间窗口和不安全假设。

SQL 错误在文本上常常很小,但在生产行为上可能很大。一个缺失的 JOIN 条件、错误的时间边界或意外的 NULL,都可能改变报表、API 响应或迁移结果。

JOIN 条件缺失或过弱

如果 JOIN 条件缺失,数据库可能组合出远超预期的行。即使有 ON 子句,也要确认使用了正确键,并在多租户或账户隔离场景下包含必要边界。

NULL 比较

NULL 不等同于普通值。应使用 IS NULLIS NOT NULL

WHERE deleted_at IS NULL

不要期待 deleted_at = NULL 像普通比较一样工作。

模糊的时间窗口

时间过滤应明确包含和排除边界:

WHERE created_at >= '2026-01-01'
  AND created_at < '2026-02-01'

这通常比试图包含一天或一个月的最后一秒更安全。

应用路径中的 SELECT star

SELECT * 适合探索,但不适合多数应用代码。它可能读取不必要字段,隐藏对表结构的依赖,也让代码评审更难。

关键结论

先格式化查询,再按子句阅读,重点检查那些小假设:JOIN 键、NULL 行为、时间范围和选择列。

SQL 格式化工具 可以帮助你在执行或评审前暴露这些小假设。

想动手练习时,可使用 DevCove 相关工具——可选,不属于本课正文。

打开相关工具

返回课程概览