CalcGuide · 技术博客主页 / 一页纸学习计划
🟠

事务与隔离级别:从 ACID 到 MVCC

分类:计算机基础 · 路径:docs/topics/transaction-and-isolation/README.md

#database#sql#transaction

理解 ACID、4 种隔离级别、MVCC、死锁与锁升级

父主题

数据库原理与 SQL:从关系模型到事务隔离

子主题(0)

事务与隔离级别:从 ACID 到 MVCC

0. 元信息

1. 学习路线

事务 → WAL/恢复 → 锁与 MVCC → snapshot → 隔离异常 → 重试

2. 阶段周数分配

本子主题按实验推进,不固定周数。每完成一个概念就留下 SQL、输入数据、输出和解释。

3. 九阶段表(精简)

阶段核心知识实践产出学会标准
1. 建模ACID、WAL、lock、snapshot、MVCC、isolation、deadlock概念图与最小 schema能说清每个概念解决什么问题
2. 实验PostgreSQL 行为、错误与边界可重跑 SQL能预测正常和异常结果
3. 对照MySQL/SQLite 差异差异表能区分标准语义和实现行为
4. 工程版本、数据规模、可观测输出技术报告能用证据解释选择

4. 第一周任务

精简版不固定 Day 1~7。执行约定是 PostgreSQL 16+、psql -v ON_ERROR_STOP=1、脚本可在空库重复运行。

5. 阶段通用验收

以 §3 的可观察标准和 §9.4 题目为验收。

6. 最终验收

独立完成一份最小实验、三组数据、一份解释和一次 PostgreSQL/MySQL 行为对照。

7. 综合项目

并入父主题“小型电商数据库”,本子主题负责 事务并发控制 的设计、实验与报告。

本主题贡献

交付物清单

  1. tx/anomalies.md:≥ 5 条隔离异常的复现脚本,含 PG default_transaction_isolation 切换(READ COMMITTED / REPEATABLE READ / SERIALIZABLE)与最小复现 SQL,含精确时间戳与 xmin/xmax 截屏;
  2. tx/locks.sql:在 4 张核心表上跑 pg_locks 视图并落表,证明行锁 vs 谓词锁 vs 索引 Gap Lock 的存在与缺失(PG 默认 RR 谓词锁靠 SSI);
  3. tx/deadlock.sql:≥ 2 条制造循环等待的 SQL,触发 PG 40P01 deadlock detected 后展示回滚日志与重试代码(Java / Go / Python 任一语言 pseudo-code);
  4. tx/pg_vs_mysql.md:PostgreSQL Serializable SSI 与 MySQL InnoDB RR(含 gap lock / next-key lock)在写偏差上的差异报告,附两边执行计划 + 锁视图。

验收标准

8. 推荐资料

见 §9.3。先用 PostgreSQL 官方文档和课程实验,书用于补理论。

9. 学习资料汇聚(v0.3 自包含)

9.1 背景与动机

事务把并发操作变成受约束的状态转换。真实系统还要处理数据规模、失败和并发。我们用 PostgreSQL 实验观察语义,再用 MySQL 核对实现差异。

9.2 概念地图

flowchart LR
  A[需求与数据] --> B[关系与约束]
  B --> C[SQL]
  C --> D[Planner / Transaction]
  I[Index / Statistics] --> D
  D --> E[执行与并发]
  E --> F[结果 / 延迟 / 锁等待]
  F --> G[验证与修改]
  G --> C

核心概念:ACID、WAL、lock、snapshot、MVCC、isolation、deadlock。图中从业务不变量出发,经 SQL、计划或事务到可观察结果,再用相同数据验证修改。

9.3 基础知识讲解

9.3.1 经典论文

资料贡献读法
Codd, A Relational Model of Data for Large Shared Data Banks关系模型与 data independence读定义与例子
Selinger et al., Access Path Selection in a Relational DBMS成本优化器对照 EXPLAIN
Gray et al., Granularity of Locks and Degrees of Consistency锁与一致性画锁兼容和事务 schedule

9.3.2 经典书籍

侧重用法
Silberschatz, Korth & Sudarshan, Database System Concepts全景教材读本子主题对应章
C. J. Date, Database Design and Relational Theory关系理论核对键、依赖与范式
Joe Celko, SQL for Smarties高级 SQL复做集合式查询

9.3.3 优秀博客与文档

资料特点用法
PostgreSQL Documentation权威行为说明查目标版本
Use The Index, LukeMarkus Winand 的索引与 SQL 案例复现实验
MySQL Reference ManualMySQL/InnoDB 对照核对方言和默认值

9.3.4 核心人物

人物影响材料
Edgar F. Codd关系模型1970 论文
C. J. Date关系理论与教学关系理论著作
Andy Pavlo数据库系统教学与研究CMU 15-445 课程

9.3.5 开发与学习方法

方法动作何时用
Query-first先写期望结果和业务不变量正确性设计
Single-variable experiment每次只改一处 SQL、索引或事务设置因果验证
Differential testPostgreSQL 与 MySQL 对跑识别标准与实现差异

课程补充:CMU 15-445 适合数据库实现,Berkeley CS186 适合系统课程与实验。Andy Pavlo 的课堂讲解用于连接论文、实现与计划输出。

9.4 经典问题与经典案例

问题为什么重要最简答案
ACID 各指什么防止概念或工程误判原子、一致、隔离、持久
MVCC 是否消除锁防止概念或工程误判否,写冲突和 DDL 仍需锁
不可重复读是什么防止概念或工程误判同事务两次读取同一行结果变化
写偏差是什么防止概念或工程误判两个快照事务共同破坏跨行不变量
死锁如何处理防止概念或工程误判固定顺序、短事务、中止后全量重试
WAL 为何先写日志防止概念或工程误判用顺序持久化支持崩溃恢复

9.5 学习难点

概念难点

难点为什么会卡突破路径
抽象语义与产品实现教材定义和默认行为容易混在一起先写标准概念,再查目标版本文档
多个概念同时影响结果单看 SQL 文本不够画数据、计划或事务时间线
NULL、重复或并发边界正常样例会隐藏问题强制加入边界数据和双会话实验

思维难点

难点为什么会卡突破路径
集合与状态推理容易按应用循环想问题先写结果关系或状态不变量
从相关性到因果改动后变快不代表改动有效固定数据与环境,每次只改一项
正确性与性能并看快结果可能是错结果先断言结果,再比较计划和耗时

工程难点

难点为什么会卡突破路径
数据形状不真实小样本计划没有代表性测规模、选择性、倾斜和 NULL
版本差异默认值与语法会变保存 SELECT version() 和引用日期
实验不可重跑手工操作丢步骤DDL、seed、query、cleanup 全写脚本

9.6 技术标准与接口

9.6.1 Entity

名称主流版本发布组织状态许可证 / 可访问性
PostgreSQL16~18PGDG活跃PostgreSQL License;文档公开
MySQL8.4 LTS / 9.xOracle活跃GPLv2 Community / 商业版
SQLite3.xSQLite Consortium活跃Public Domain
Oracle Database19c / 23aiOracle活跃商业许可
SQL Server2022 / 2025Microsoft活跃商业/Developer
SQLISO/IEC 9075ISO/IEC JTC 1/SC 32持续修订正文通常收费

9.6.2 Scope

本子主题处理 事务并发控制。SQL 标准描述通用语义,产品文档描述 planner、storage、locking 等实现。不要把 PostgreSQL 扩展当成所有数据库的共同保证。

9.6.3 Structure

必须掌握的接口:DDL/DML、约束、SELECT/JOIN、事务控制、EXPLAIN (ANALYZE, BUFFERS)、system catalog 与统计视图。具体重点是:ACID、WAL、lock、snapshot、MVCC、isolation、deadlock。

9.6.4 Ecosystem

PostgreSQL 是主实验环境。MySQL 用于 InnoDB 和 optimizer 对照。SQLite 适合单文件实验。Oracle 与 SQL Server 用来了解企业产品的方言、执行计划和并发差异。JDBC、ODBC、DB-API 是常见客户端接口。

9.6.5 Depth Tiers

层级能力可观察标准
L0知道存在能说出核心名词
L1看得懂示例能读 SQL、计划或事务脚本
L2能正确调用能完成正常与边界实验
L3能解释与排错能用结果、计划、锁或日志解释问题并验证修改
L4能设计与扩展能修改优化器、存储或并发控制实现

本计划要求达到 L3

9.6.6 Source

10. 常见误区

11. 所有知识点分类(统一规则)

  1. 编程语言
  2. 数据结构与算法
  3. 计算机基础
  4. 工程技术
  5. Web 与后端
  6. 前端与客户端
  7. 数据与人工智能
  8. 项目与职业能力
  9. 安全与可靠性

本计划归属:计算机基础 主 + Web 与后端 辅。


直接依赖(1)

查看知识图谱