📄 一句话概括
错误分门别类才好对症:语法错误=SQL 写错了(看报错改语句)、资源不足=容量撑不住了(扩容或优化)——病名不同,药方完全不同。
📝 本节和前面几节的关系
7-4 教了「看病历」,本节教「认病名」:同样是日志里一条错误,语法错误是人写错了(改写就好),资源不足是系统撑不住(调结构)。分不清这两类,就会「语句没写错却拼命改语句」。
一、两大类错误
| 语法错误 | 资源不足 | |
|---|---|---|
| 本质 | SQL 不符合语言规则 | 容量/额度用尽 |
| 典型报错 | syntax error、no such column |
database is locked、磁盘满、连接数满 |
| 对策 | 读报错、改语句 | 扩容、优化、清理、限流 |
| 谁来修 | 写 SQL 的人 | 管系统的人 |
二、语法错误高频四种
- 字段/表名拼错:
no such column: tital——真名是title(3-15 命名规则的意义) - 逗号引号缺失:
INSERT少一个逗号,整句报syntax error - 保留字当名字:给列起名
order,一查就炸——加引号或改名 - 类型用错:拿
CHAR(13)的 ISBN 当数字算(4-1 类型体系)
三、资源不足高频三种
- 磁盘满:日志/数据撑爆——清理+告警(6-5 的 80% 红线)
- 连接数满:应用忘关连接(第三章
close()意识的数据库版)——找泄漏点 - 锁等待超时:并发互相卡(4-17 死锁的轻症版)——优化事务、统一加锁顺序
四、动手 Demo:两种病各诊一次
-- 病例 1(语法错误):故意写错
SELECT tital FROM books; -- no such column: tital
-- 诊断:字段拼错 → 改回 title
-- 病例 2(资源不足):纸面推演
-- 报错:database is locked
-- 诊断:另一个连接持锁不放(长事务没提交)
-- 对策:找到未提交的事务 → COMMIT 或回滚;日常纪律=事务要短
【准备块】5-19 的 book_review 库;病例 1 真跑,病例 2 推演。
五、30 秒实验
回忆你学 C++ 时编译报错的第一反应:读报错第一行(14 章的异常处理同理)。SQL 的 syntax error 报错通常还会指出出错的字符位置——比 C++ 的报错友好得多,别浪费。
六、常见误区
- 「报错都一样处理」:先分类(语法 or 资源),药方才不会开错
- 「资源不足就加机器」:连接泄漏、慢事务加机器只是推迟爆炸;先找泄漏点再谈扩容(7-8 再展开扩容本身)
- 「语法错误是小事」:在定时任务里,一条语法错会让整个夜间批处理停摆
自测三问
1. 语法错误和资源不足的本质区别?(语句不符合规则 vs 容量额度用尽——对策一个是改语句、一个是调系统) 2. `database is locked` 属于哪类?常见根因?(资源不足;长事务持锁未提交) 3. 给列起名 `order` 会怎样?(order 是保留字,查询报语法错误——命名规则的实战意义)- ☐ 下一节(7-6 慢查询-执行时间较长的SQL语句)
相关笔记
- 错误日志-发生错误的历史记录 —— 病历本在前,认病名在后
- 死锁-两个处理发生冲突导致处理停止的问题 —— 锁等待超时的重症版
- 慢查询-执行时间较长的SQL语句 —— 下一节:不报错但很慢的「隐性病」
- 🗄️ 数据库基础 · 索引 —— 全课路线图