Update 数据库系统原理.md

重新绘制二级封锁协议图和 ReadView 图:二级封锁协议中 T2 读取后释放 S 锁(unlock-s);ReadView 图按正文的三条可见性规则画出事务 ID 的三个区间。

Closes #1176
This commit is contained in:
CyC2018
2026-10-25 18:51:59 +08:00
parent 385df45164
commit 22bcc60b06
5 changed files with 129 additions and 2 deletions
Binary file not shown.

After

Width:  |  Height:  |  Size: 90 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 KiB

+2 -2
View File
@@ -189,7 +189,7 @@ MySQL 中提供了两种封锁粒度:行级锁以及表级锁。
可以解决读脏数据问题,因为如果一个事务在对数据 A 进行修改,根据 1 级封锁协议,会加 X 锁,那么就不能再加 S 锁了,也就是不会读入数据。
<div align="center"> <img src="https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/image-20191207220831843.png"/> </div><br>
<div align="center"> <img src="pics/lock-protocol-2.png"/> </div><br>
**三级封锁协议**
@@ -291,7 +291,7 @@ INSERT、UPDATE、DELETE 操作会创建一个日志,并将事务版本号 TRX
MVCC 维护了一个 ReadView 结构,主要包含了创建 ReadView 时系统中未提交的事务列表 TRX_IDs {TRX_ID_1, TRX_ID_2, ...},该列表的最小值 TRX_ID_MIN,以及下一个将要分配的事务 ID TRX_ID_MAX。
<div align="center"> <img src="https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/image-20191208171445674.png"/> </div><br>
<div align="center"> <img src="pics/readview.png"/> </div><br>
在进行 SELECT 操作时,根据数据行快照的 TRX_ID 与 TRX_ID_MIN 和 TRX_ID_MAX 之间的关系,从而判断数据行快照是否可以使用: