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 之间的关系,从而判断数据行快照是否可以使用:
diff --git a/tools/diagram/src/lock-protocol-2.svg b/tools/diagram/src/lock-protocol-2.svg
new file mode 100644
index 00000000..f95291b4
--- /dev/null
+++ b/tools/diagram/src/lock-protocol-2.svg
@@ -0,0 +1,71 @@
+
diff --git a/tools/diagram/src/readview.svg b/tools/diagram/src/readview.svg
new file mode 100644
index 00000000..fb0eb599
--- /dev/null
+++ b/tools/diagram/src/readview.svg
@@ -0,0 +1,56 @@
+