File tree Expand file tree Collapse file tree 1 file changed +10
-4
lines changed Expand file tree Collapse file tree 1 file changed +10
-4
lines changed Original file line number Diff line number Diff line change 69
69
| REPEATABLE-READ | × | × | √ |
70
70
| SERIALIZABLE | × | × | × |
71
71
72
- MySQL InnoDB 存储引擎的默认支持的隔离级别是 ** REPEATABLE-READ(可重读)** 。我们可以通过` SELECT @@tx_isolation; ` 命令来查看, MySQL 8.0 该命令改为` SELECT @@transaction_isolation; `
72
+ MySQL InnoDB 存储引擎的默认支持的隔离级别是 ** REPEATABLE-READ(可重读)** 。我们可以通过` SELECT @@tx_isolation; ` 命令来查看, MySQL 8.0 该命令改为` SELECT @@transaction_isolation; `
73
73
74
74
``` sql
75
75
mysql> SELECT @@tx_isolation;
@@ -80,11 +80,17 @@ mysql> SELECT @@tx_isolation;
80
80
+ -- ---------------+
81
81
```
82
82
83
- 这里需要注意的是:与 SQL 标准不同的地方在于InnoDB 存储引擎在 ** REPEATABLE-READ(可重读)** 事务隔离级别下,允许应用使用 Next-Key Lock 锁算法来避免幻读的产生。 这与其他数据库系统(如 SQL Server)是不同的。所以说虽然 InnoDB 存储引擎的默认支持的隔离级别是 ** REPEATABLE-READ(可重读)** ,但是可以通过应用加锁读(例如 ` select * from table for update ` 语句)来保证不会产生幻读,而这个加锁度使用到的机制就是 Next-Key Lock 锁算法。从而达到了 SQL 标准的 ** SERIALIZABLE(可串行化)** 隔离级别。
83
+ ~~ 这里需要注意的是:与 SQL 标准不同的地方在于 InnoDB 存储引擎在 ** REPEATABLE-READ(可重读)** 事务隔离级别下使用的是 Next-Key Lock 锁算法,因此可以避免幻读的产生, 这与其他数据库系统(如 SQL Server)是不同的。所以说 InnoDB 存储引擎的默认支持的隔离级别是 ** REPEATABLE-READ(可重读)** 已经可以完全保证事务的隔离性要求,即达到了 SQL 标准的 ** SERIALIZABLE(可串行化)** 隔离级别。~~
84
84
85
- 因为隔离级别越低,事务请求的锁越少,所以大部分数据库系统的隔离级别都是 ** READ-COMMITTED(读取提交内容): ** ,但是你要知道的是InnoDB 存储引擎默认使用 ** REPEATABLE-READ(可重读)** 并不会有任何性能损失。
85
+ 🐛 问题更正: ** MySQL InnoDB 的 REPEATABLE-READ(可重读)并不保证避免幻读,需要应用使用加锁读来保证。而这个加锁度使用到的机制就是 Next-Key Locks。 **
86
86
87
- InnoDB 存储引擎在 ** 分布式事务** 的情况下一般会用到** SERIALIZABLE(可串行化)** 隔离级别。
87
+ 因为隔离级别越低,事务请求的锁越少,所以大部分数据库系统的隔离级别都是 ** READ-COMMITTED(读取提交内容)** ,但是你要知道的是 InnoDB 存储引擎默认使用 ** REPEATABLE-READ(可重读)** 并不会有任何性能损失。
88
+
89
+ InnoDB 存储引擎在 ** 分布式事务** 的情况下一般会用到 ** SERIALIZABLE(可串行化)** 隔离级别。
90
+
91
+ 🌈 拓展一下(以下内容摘自《MySQL 技术内幕:InnoDB 存储引擎(第 2 版)》7.7 章):
92
+
93
+ > InnoDB 存储引擎提供了对 XA 事务的支持,并通过 XA 事务来支持分布式事务的实现。分布式事务指的是允许多个独立的事务资源(transactional resources)参与到一个全局的事务中。事务资源通常是关系型数据库系统,但也可以是其他类型的资源。全局事务要求在其中的所有参与的事务要么都提交,要么都回滚,这对于事务原有的 ACID 要求又有了提高。另外,在使用分布式事务时,InnoDB 存储引擎的事务隔离级别必须设置为 SERIALIZABLE。
88
94
89
95
### 实际情况演示
90
96
You can’t perform that action at this time.
0 commit comments