跳至正文
Lynn LeeMYSQL / LEARNING LAB

LEARNING ROUTE / VERIFIED 2026-11-14

阅读、预测、运行、解释。

两门大学课程、六个独立练习、一个真实 InnoDB 引擎。先写业务不变量,再将通用数据库原理与 MySQL 实测行为对应起来。

所选 2026 年春季课程及 PDF 于 2026 年 11 月 14 日核验。本站链接原始资料,不转载课程内容、不发布大学作业答案。课程介绍的是长期发展的数据库原理,事务和 MVCC 并非 2026 年新发明。

下载可检索资源清单 JSON · 公开访问核验与哈希

离线也可检索:python scripts/curriculum.py MVCC。检索内容仅保留在本页面。

Carnegie Mellon University

15-445/645 · Intro to Database Systems

Spring 2026 · 核验 2026-11-14

先修要求:官方先修:CMU 15-213/513,能编写及调试 C++17。本站改编练习需要 SQL、Python、事务和索引基础,无需完成 BusTub。

公开材料:本次无需登录即可读取课程大纲、课表及下方指定 PDF。教材章节仅是阅读指引,不代表完整教材可免费取得;录像及第三方文章的访问条件可能不同。

注册与费用:公开阅读与学校注册、学分、作业提交、助教支持及费用相互独立;这里不承诺免费学分或录取。MIT 明确禁止公开其实验及习题答案。本站提供独立 SQL 练习,不实现这些课程作业。

课程主页 · 大纲 · 课表与阅读

Massachusetts Institute of Technology

6.5830/6.5831 (formerly 6.814/6.830) · Database Systems

Spring 2026 · 核验 2026-11-14

先修要求:2026 春季大纲期望 6.1210(原 6.006)或同等算法基础,了解计算机系统(如 6.1800/原 6.033),能调试较大型软件;不要求数据库先修,课程实验使用 Go。

公开材料:本次无需登录即可读取课程大纲、课表及下方指定 PDF。教材章节仅是阅读指引,不代表完整教材可免费取得;录像及第三方文章的访问条件可能不同。

注册与费用:公开阅读与学校注册、学分、作业提交、助教支持及费用相互独立;这里不承诺免费学分或录取。MIT 明确禁止公开其实验及习题答案。本站提供独立 SQL 练习,不实现这些课程作业。

课程主页 · 大纲 · 课表与阅读

U1 / 先写不变量,再选隔离级别

先预测:先枚举两种串行撤岗顺序。如果每次都至少留一人,终值 (0,0) 可能出现吗?

python -c 'from scripts.invariant_oracle import serial_outcomes; print(serial_outcomes())'
python lab.py oncall --output .local/u1/oncall.json

检查与解释:运行独立 Python 规格模型,再运行 oncall。比较模型允许的 (0,1)/(1,0) 与观察者读取的 final_rows。

模型只覆盖固定两名医生、各一次请求,不能证明任意 SQL 的可串行化。

U2 / 区分锁等待和死锁

先预测:哪条第二次 UPDATE 闭合等待环?同顺序对照是否也会等待?

python lab.py run --output .local/u2/run.json
python scripts/validate.py .local/u2/run.json

检查与解释:运行原有完整实验,检查真实等待边、匹配的 WAITING/GRANTED 锁、1213、死锁摘录和表终值。保留基线后修改加锁顺序。

成环前的锁快照不能独立证明完整死锁环;必须结合死锁摘录与回滚结果。

U3 / 预测快照读与当前读

先预测:RR 的 FOR UPDATE 会刷新下一次普通 SELECT 的读视图吗?先写出四次预期读值。

python lab.py run --output .local/u3/run.json
python scripts/validate.py .local/u3/run.json

检查与解释:运行完整实验,核对 RC 100/200/200/200 与 RR 100/100/200/100,并确认后续写入真实等待。

通用 MVCC 与 InnoDB 具体语句规则需要分开理解;RR 不等于可串行化。

U4 / 修复写偏差,并检验错误修复

先预测:两边先建立快照,再竞争同一守卫行:RR 下安全吗?RC 下有什么差别?

python lab.py oncall --output .local/u4/oncall.json
cp sql/oncall.json .local/u4/sql.json
python lab.py oncall --sql-file .local/u4/sql.json --output .local/u4/edited.json

检查与解释:运行 oncall,对比 unguarded、late_guard 与 guard_first。复制 sql/oncall.json 后修改 SQL,用 --sql-file 复跑。检查独立终值与真实 B→A 守卫锁等待。

每个写入者都要遵守协议;guard_first 的 RR 事务不能更早建立一致性读快照。未测试成员插入、删除或吞吐量。

U5 / 锁住决策所依赖的数据

先预测:为什么等待后的锁定读取会只返回一名医生?单行 AND on_call=1 能保护跨行计数吗?

python lab.py oncall --output .local/u5/oncall.json
python scripts/validate_oncall.py .local/u5/oncall.json

检查与解释:检查 locking_roster 实际返回的医生 ID、PRIMARY 锁和 unguarded 更新。锁定读取对照只批准一人撤岗,单行条件仍允许两人都撤岗。

只有固定成员和一个班次。不把当前记录锁现象推广为对幻影、范围插入或绕过协议写入的保证。

U6 / 使用索引而不改变答案

先预测:哪些谓词能缩小索引扫描?为什么只在相同投影内比较结果哈希?

python lab.py run --output .local/u6/run.json
python scripts/validate.py .local/u6/run.json

检查与解释:运行完整实验,比较两组等价查询的完整结果、JSON 计划与 EXPLAIN ANALYZE 实际迭代器行数,再看七次取回耗时。

估计行数不是实测行数,索引也不保证更快。没有随机交叉顺序、冷缓存或生产容量结论。

2026 资料发布状态

CMU Fall 2026 确实存在,课表更新于 11 月 11 日。本次核验时 11 月 16 日 MVCC 尚未到课期,也没有讲义或幻灯链接,因此使用已完成的春季版本。不推测之后是否发布。 秋季官方课表

开始业务不变量练习 →