LEARNING ROUTE / VERIFIED 2026-11-14
阅读、预测、运行、解释。
两门大学课程、六个独立练习、一个真实 InnoDB 引擎。先写业务不变量,再将通用数据库原理与 MySQL 实测行为对应起来。
所选 2026 年春季课程及 PDF 于 2026 年 11 月 14 日核验。本站链接原始资料,不转载课程内容、不发布大学作业答案。课程介绍的是长期发展的数据库原理,事务和 MVCC 并非 2026 年新发明。
离线也可检索: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 / 先写不变量,再选隔离级别
- #17 Concurrency Control Theory
Mar 23; lecture notes sections 2, 5–6 (transactions, consistency, serial schedules) - Lec 11 Transactions and Locking
Mar 17; PDF pages 36–48: 2PL, waits-for graphs and strict/rigorous locking
先预测:先枚举两种串行撤岗顺序。如果每次都至少留一人,终值 (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 / 区分锁等待和死锁
- #18 Two-Phase Locking
Mar 25; lecture notes sections 1–3 (locks, 2PL, deadlock handling) - Lec 11 Transactions and Locking
Mar 17; PDF pages 36–48: 2PL, waits-for graphs and strict/rigorous locking
先预测:哪条第二次 UPDATE 闭合等待环?同顺序对照是否也会等待?
python lab.py run --output .local/u2/run.json
python scripts/validate.py .local/u2/run.json检查与解释:运行原有完整实验,检查真实等待边、匹配的 WAITING/GRANTED 锁、1213、死锁摘录和表终值。保留基线后修改加锁顺序。
成环前的锁快照不能独立证明完整死锁环;必须结合死锁摘录与回滚结果。
U3 / 预测快照读与当前读
- #20 Multi-Version Concurrency Control I
Apr 1; lecture notes, multi-version storage and snapshots; schedule reading Chapter 18.7–18.8 - Lec 12 Optimistic Concurrency Control, Snapshot Isolation
Mar 19; lecture slides; compare snapshot theory with InnoDB's plain and locking reads - MySQL 8.4: Consistent Nonlocking Reads
Reference Manual 17.7.2.3; RC statement snapshots and RR first consistent read
先预测: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 / 修复写偏差,并检验错误修复
- #17 Concurrency Control Theory
Mar 23; lecture notes sections 2, 5–6 (transactions, consistency, serial schedules) - Lec 12 Optimistic Concurrency Control, Snapshot Isolation
Mar 19; lecture slides; compare snapshot theory with InnoDB's plain and locking reads - MySQL 8.4: Consistent Nonlocking Reads
Reference Manual 17.7.2.3; RC statement snapshots and RR first consistent read - MySQL 8.4: Locking Reads
Reference Manual 17.7.2.4; explicit transaction and SELECT FOR UPDATE
先预测:两边先建立快照,再竞争同一守卫行: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 / 锁住决策所依赖的数据
- #18 Two-Phase Locking
Mar 25; lecture notes sections 1–3 (locks, 2PL, deadlock handling) - MySQL 8.4: Locking Reads
Reference Manual 17.7.2.4; explicit transaction and SELECT FOR UPDATE
先预测:为什么等待后的锁定读取会只返回一名医生?单行 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 / 使用索引而不改变答案
- #08 Indexes & Filters I
Feb 9; lecture notes on B+ trees; schedule reading Chapter 14.1–14.4 - #15 Query Planning & Optimization I
Mar 16; lecture notes sections 2–8 (equivalence, rewrites, cost, access paths) - MySQL 8.4: EXPLAIN
Reference Manual 15.8.2; EXPLAIN ANALYZE executes the statement
先预测:哪些谓词能缩小索引扫描?为什么只在相同投影内比较结果哈希?
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 尚未到课期,也没有讲义或幻灯链接,因此使用已完成的春季版本。不推测之后是否发布。 秋季官方课表