mirror of
https://github.com/CyC2018/Interview-Notebook.git
synced 2026-10-27 05:23:46 +00:00
Update 数据库系统原理.md
重新绘制二级封锁协议图和 ReadView 图:二级封锁协议中 T2 读取后释放 S 锁(unlock-s);ReadView 图按正文的三条可见性规则画出事务 ID 的三个区间。 Closes #1176
This commit is contained in:
Binary file not shown.
|
After Width: | Height: | Size: 90 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 68 KiB |
+2
-2
@@ -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 之间的关系,从而判断数据行快照是否可以使用:
|
||||
|
||||
|
||||
Reference in New Issue
Block a user