diff --git a/notes/数据库系统原理.md b/notes/数据库系统原理.md
index 2e84b5af..ebea2700 100644
--- a/notes/数据库系统原理.md
+++ b/notes/数据库系统原理.md
@@ -6,24 +6,25 @@
* [问题](#问题)
* [解决方法](#解决方法)
* [三、封锁](#三封锁)
- * [封锁类型](#封锁类型)
* [封锁粒度](#封锁粒度)
+ * [封锁类型](#封锁类型)
* [封锁协议](#封锁协议)
* [四、隔离级别](#四隔离级别)
* [五、多版本并发控制](#五多版本并发控制)
* [版本号](#版本号)
* [Undo 日志](#undo-日志)
* [实现过程](#实现过程)
-* [六、关系数据库设计理论](#六关系数据库设计理论)
+* [六、间隙锁](#六间隙锁)
+* [七、关系数据库设计理论](#七关系数据库设计理论)
* [函数依赖](#函数依赖)
* [异常](#异常)
* [范式](#范式)
-* [七、数据库系统概述](#七数据库系统概述)
+* [八、数据库系统概述](#八数据库系统概述)
* [基本术语](#基本术语)
* [数据库的三层模式和两层映像](#数据库的三层模式和两层映像)
-* [八、关系数据库建模](#八关系数据库建模)
+* [九、关系数据库建模](#九关系数据库建模)
* [ER 图](#er-图)
- * [约束](#约束)
+ * [十、约束](#十约束)
* [参考资料](#参考资料)
@@ -94,17 +95,6 @@ T1 读取某个范围的数据,T2 在这个范围内插
# 三、封锁
-## 封锁类型
-
-- 排它锁(Exclusive),简写为 X 锁,又称写锁。
-- 共享锁(Shared),简写为 S 锁,又称读锁。
-- 一个事务对数据对象 A 加了 X 锁,就可以对 A 进行读取和更新。加锁期间其它事务不能对 A 加任何锁。
-- 一个事务对数据对象 A 加了 S 锁,可以对 A 进行读取操作,但是不能进行更新操作。加锁期间其它事务能对 A 加 S 锁,但是不能加 X 锁。
-
-以上加锁规定总结如下:
-
-
-
## 封锁粒度
@@ -115,6 +105,43 @@ T1 读取某个范围的数据,T2 在这个范围内插
MySQL 中提供了两种封锁粒度:行级锁以及表级锁。
+## 封锁类型
+
+### 1. 排它锁与共享锁
+
+- 排它锁(Exclusive),简写为 X 锁,又称写锁。
+- 共享锁(Shared),简写为 S 锁,又称读锁。
+
+有以下两个规定:
+
+1. 一个事务对数据对象 A 加了 X 锁,就可以对 A 进行读取和更新。加锁期间其它事务不能对 A 加任何锁。
+2. 一个事务对数据对象 A 加了 S 锁,可以对 A 进行读取操作,但是不能进行更新操作。加锁期间其它事务能对 A 加 S 锁,但是不能加 X 锁。
+
+锁的兼容关系如下:
+
+| - | X | S |
+| :--: | :--: | :--: |
+|X|YES|No|
+|S|No| No|
+
+### 2. 意向锁
+
+意向锁(Intention Locks)可以支持多粒度封锁,它在原来的 X/S 锁之上引入了 IX/IS,用来表示一个事务想要在某个数据对象上加 X 锁或 S 锁。
+
+有以下两个规定:
+
+1. 一个事务在获得某个数据行对象的 S 锁之前,必须先获得 IS 锁或者更强的锁;
+2. 一个事务在获得某个数据行对象的 X 锁之前,必须先获得 IX 锁。
+
+各种锁的兼容关系如下:
+
+| - | X | IX | S | IS |
+| :--: | :--: | :--: | :--: | :--: |
+|X |NO |NO |NO | NO|
+|IX |NO |YES|NO | YES|
+|S |NO |NO |YES| YES|
+|IS |NO |YES|YES| YES|
+
## 封锁协议
### 1. 三级封锁协议
@@ -230,7 +257,9 @@ InnoDB 的 MVCC 使用到的快照存储在 Undo 日志中,该日志通过回
将系统版本号作为更新后的数据行快照的创建版本号,同时将系统版本号作为作为更新前的数据行快照的删除版本号。可以理解为新执行 DELETE 后执行 INSERT。
-# 六、关系数据库设计理论
+# 六、间隙锁
+
+# 七、关系数据库设计理论
## 函数依赖
@@ -357,7 +386,7 @@ Sname, Sdept 和 Manme 都函数依赖于 Sno,而部分依赖于键码。当
可以分解成 SC(Sname, Cname, Grade) 和 ST(Sname, Tname),对于 ST,属性之间是多对多关系,无函数依赖。
-# 七、数据库系统概述
+# 八、数据库系统概述
## 基本术语
@@ -399,7 +428,7 @@ Sname, Sdept 和 Manme 都函数依赖于 Sno,而部分依赖于键码。当
把模式的全局逻辑结构和内模式的物理结构联系起来,该映像可以保证数据和应用程序的物理独立性。
-# 八、关系数据库建模
+# 九、关系数据库建模
## ER 图
@@ -435,7 +464,7 @@ Entity-Relationship,有三个组成部分:实体、属性、联系。
-## 约束
+## 十、约束
### 1. 键码
@@ -463,6 +492,7 @@ Entity-Relationship,有三个组成部分:实体、属性、联系。
- 史嘉权. 数据库系统概论[M]. 清华大学出版社有限公司, 2006.
- 施瓦茨. 高性能MYSQL(第3版)[M]. 电子工业出版社, 2013.
+- [The InnoDB Storage Engine](https://dev.mysql.com/doc/refman/5.7/en/innodb-storage-engine.html)
- [Transaction isolation levels](https://www.slideshare.net/ErnestoHernandezRodriguez/transaction-isolation-levels)
- [Concurrency Control](http://scanftree.com/dbms/2-phase-locking-protocol)
- [The Nightmare of Locking, Blocking and Isolation Levels!](https://www.slideshare.net/brshristov/the-nightmare-of-locking-blocking-and-isolation-levels-46391666)