diff --git a/notes/pics/lock-protocol-2.png b/notes/pics/lock-protocol-2.png new file mode 100644 index 00000000..27bdabbd Binary files /dev/null and b/notes/pics/lock-protocol-2.png differ diff --git a/notes/pics/readview.png b/notes/pics/readview.png new file mode 100644 index 00000000..29b01451 Binary files /dev/null and b/notes/pics/readview.png differ diff --git a/notes/数据库系统原理.md b/notes/数据库系统原理.md index 8f6b28b9..ec7b72c6 100644 --- a/notes/数据库系统原理.md +++ b/notes/数据库系统原理.md @@ -189,7 +189,7 @@ MySQL 中提供了两种封锁粒度:行级锁以及表级锁。 可以解决读脏数据问题,因为如果一个事务在对数据 A 进行修改,根据 1 级封锁协议,会加 X 锁,那么就不能再加 S 锁了,也就是不会读入数据。 -

+

**三级封锁协议** @@ -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。 -

+

在进行 SELECT 操作时,根据数据行快照的 TRX_ID 与 TRX_ID_MIN 和 TRX_ID_MAX 之间的关系,从而判断数据行快照是否可以使用: