§ 8·CS 地基3 prompts

数据库系统

数据库是绝大多数应用的「记账本」。VibeCoder 的目标是能用 SQL 完成增删改查、理解索引为什么快、能看懂查询计划。不需要深入数据库引擎实现,但要知道引擎在帮你做什么。

先读这部分
§ 8

数据库系统

数据库是绝大多数应用的「记账本」。VibeCoder 的目标是能用 SQL 完成增删改查、理解索引为什么快、能看懂查询计划。不需要深入数据库引擎实现,但要知道引擎在帮你做什么。

核心操作
  • CRUD。Create(增)、Read(查)、Update(改)、Delete(删)四项基本功。几乎所有的业务操作都可以拆成这四种。
  • 索引。理解为什么有索引查询会变快:把全表扫描 O(n) 变成 B+ 树查找 O(log n) 或哈希查找 O(1)。
  • ORDER BY。排序;多列排序时,先按第一列排,第一列相同的再按第二列排,以此类推。
  • GROUP BY。按某列分组,然后对每组做聚合,比如统计每个部门有多少人、每个分类的总销售额。
  • 聚合函数。COUNT、SUM、AVG、MAX、MIN 等,用来从一组行里算出一个汇总值。

能用 SQLite 写点小练习,知道这些操作在底层大概是怎么执行的。

动手做 · 提示词卡

把这段知识变成一段可执行的练习

以下 3 张卡,每张都是一段可复制的提示词。打开 Claude Code(或任何 LLM 终端),把卡里的提示词粘进去,AI 会陪你完成这一步。遇到不会的概念,把 AI 的回答贴回 卡里继续问下一步。可以一次做完,也可以分几次。

3 操作
Prompt 01操作★★

SQLite EXPLAIN 看计划

为什么要学AI 写的 SQL 慢得离谱。不会看 EXPLAIN 你只能干瞪眼。
打个比方看地图导航:是绕路还是直走?EXPLAIN 就是给 SQL 看路线。
VibeCoder 场景Claude Code 写的查询要 30 秒,你想知道是不是没走索引。

你想知道 SELECT 在 SQLite 底层到底是怎么执行的。

前置本地装好 sqlite3 命令
  1. 01sqlite3 test.db 建表。
  2. 02python 脚本插入 1 万行。
  3. 03EXPLAIN QUERY PLAN 看 SCAN。
  4. 04CREATE INDEX idx_age ON users(age)。
  5. 05再 EXPLAIN 看 SEARCH USING INDEX。
粘贴到 Claude Code(或任何 LLM 终端)
教我用 SQLite 的 EXPLAIN QUERY PLAN 看查询计划。1. 给我建表 SQL:users(id, name, age)。2. 给我 Python 代码插入 1 万行随机数据。3. 教我跑 EXPLAIN QUERY PLAN SELECT * FROM users WHERE age > 18,输出会有 SCAN users 这种话。4. 解释 SCAN(全表扫描)和 SEARCH(用索引)的区别。5. 现在 SCAN 是因为没索引,告诉我加哪条索引 SQL,加完再 EXPLAIN,输出应该变成 SEARCH USING INDEX。
✓ 完成判据同一条 SELECT 在加索引前后 EXPLAIN 输出从 SCAN 变 SEARCH。
不要在每个列上都加索引,写入会变慢,索引也占空间。
Prompt 02操作★★

加索引前后耗时对比

为什么要学索引知道概念不算数。亲手测一次差 100 倍,你才会主动想起加。
打个比方书后面的索引页 vs 一页页翻找;100 万行数据差距震撼。
VibeCoder 场景Claude Code 帮你写完查询慢得离谱,你想加个索引但还没体感。

你想自己测一次加索引能让查询快多少倍。

前置本地装好 Python 3 + sqlite3 模块(标准库自带)
  1. 01跑脚本插入 100 万行。
  2. 02看加索引前的耗时(会很慢)。
  3. 03加索引,再跑同样查询。
  4. 04比例至少 50 倍以上。
  5. 05把 age = 25 改成 age BETWEEN 20 AND 30,再跑看加速比变化。
粘贴到 Claude Code(或任何 LLM 终端)
写一段 Python 代码:1. 建一个 SQLite 表 users(id, name, age)。2. 插入 100 万行随机数据。3. 跑同一条 SELECT count(*) FROM users WHERE age = 25 共 100 次,记录总耗时。4. 加一个索引 CREATE INDEX idx_age ON users(age)。5. 再跑同样 100 次,记录耗时。6. 打印 '加索引前 X 秒、加索引后 Y 秒、加速 N 倍'。代码不超过 60 行。
✓ 完成判据控制台打印两个耗时,加索引后至少快 20 倍。
别在测耗时之前忘了 commit,事务里的查询会被缓存影响数字。
Prompt 03操作★★

多列 ORDER BY 练习

为什么要学数据展示永远要排序。多列 ORDER BY 不熟,AI 报表逻辑你看不懂。
打个比方通讯录按姓氏排序,同姓再按名排;先排哪列后排哪列重要。
VibeCoder 场景Claude Code 给你'按部门、再按工资倒序'的 SQL,你不确定对不对。

你要按'部门升序、部门相同时按工资降序'排员工表。

前置本地装好 sqlite3 命令
  1. 01建表插 10 行数据。
  2. 02跑 ORDER BY dept ASC, salary DESC 看输出。
  3. 03改成 salary ASC 再跑。
  4. 04自己说说多列 ORDER BY 是怎么稳定排序的。
粘贴到 Claude Code(或任何 LLM 终端)
写一段 SQL 在 SQLite 里跑:1. 建表 employees(id, dept, salary)。2. 插入 10 行示例数据,至少 3 个部门、每个部门 2-4 人、工资各不相同。3. 写一条 SELECT,按 dept 升序 + salary 降序输出。4. 解释多列 ORDER BY 的执行逻辑:先按第一列排,第一列相同的再按第二列排。5. 让我把 salary 改成升序再跑一次,对比输出变化。
✓ 完成判据你能脱稿写出 ORDER BY a ASC, b DESC 的语法并解释执行顺序。
ASC 是默认值,DESC 必须显式写;写错方向打印出来不容易一眼看出来。