🗄️ 第七章 用于保护数据库的基础知识-故障恢复与安全措施
📄 一句话概括

错误分门别类才好对症:语法错误=SQL 写错了(看报错改语句)、资源不足=容量撑不住了(扩容或优化)——病名不同,药方完全不同。

📝 本节和前面几节的关系

7-4 教了「看病历」,本节教「认病名」:同样是日志里一条错误,语法错误是人写错了(改写就好),资源不足是系统撑不住(调结构)。分不清这两类,就会「语句没写错却拼命改语句」。

一、两大类错误

语法错误 资源不足
本质 SQL 不符合语言规则 容量/额度用尽
典型报错 syntax error、no such column database is locked、磁盘满、连接数满
对策 读报错、改语句 扩容、优化、清理、限流
谁来修 写 SQL 的人 管系统的人

二、语法错误高频四种

  1. 字段/表名拼错:no such column: tital——真名是 title(3-15 命名规则的意义)
  2. 逗号引号缺失:INSERT 少一个逗号,整句报 syntax error
  3. 保留字当名字:给列起名 order,一查就炸——加引号或改名
  4. 类型用错:拿 CHAR(13) 的 ISBN 当数字算(4-1 类型体系)

三、资源不足高频三种

  1. 磁盘满:日志/数据撑爆——清理+告警(6-5 的 80% 红线)
  2. 连接数满:应用忘关连接(第三章 close() 意识的数据库版)——找泄漏点
  3. 锁等待超时:并发互相卡(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++ 的报错友好得多,别浪费。

六、常见误区

自测三问 1. 语法错误和资源不足的本质区别?(语句不符合规则 vs 容量额度用尽——对策一个是改语句、一个是调系统) 2. `database is locked` 属于哪类?常见根因?(资源不足;长事务持锁未提交) 3. 给列起名 `order` 会怎样?(order 是保留字,查询报语法错误——命名规则的实战意义)

相关笔记