Skip to content

Commit

Permalink
📦事务
Browse files Browse the repository at this point in the history
- 重新组织隔离级别表格,增加详细解释
- 添加 MySQL 在不同隔离级别下的幻读解决方案说明
- 调整默认隔离级别为可重复读,并讨论性能权衡
  • Loading branch information
0xcaffebabe committed Dec 27, 2024
1 parent 8e44eb9 commit f8df2a1
Showing 1 changed file with 8 additions and 6 deletions.
14 changes: 8 additions & 6 deletions doc/中间件/数据库/数据库系统/事务管理/事务.md
Original file line number Diff line number Diff line change
Expand Up @@ -223,12 +223,14 @@ stateDiagram-v2
- 未提交读 READ-UNCOMMITTED
- 事务中的修改,即使没有提交,对其它事务也是可见的

隔离级别 | 脏读 | 不可重复读 | 幻读 | 加锁读
---------------- | -- | ----- | -- | ---
READ-UNCOMMITTED | √ | √ | √ | ×
READ-COMMITTED | × | √ | √ | ×
REPEATABLE-READ | × | × | √ | ×
SERIALIZABLE | × | × | × | √
| 隔离级别 | 脏读 (Dirty Read) | 不可重复读 (Non-repeatable Read) | 幻读 (Phantom Read) |
|------------------|--------------------|----------------------------------|---------------------|
| **读未提交 (Read Uncommitted)** | 会发生 | 会发生 | 会发生 |
| **读已提交 (Read Committed)** | 不会发生 | 会发生 | 会发生 |
| **可重复读 (Repeatable Read)** | 不会发生 | 不会发生 | 会发生 |
| **串行化 (Serializable)** | 不会发生 | 不会发生 | 不会发生 |

mysql 从隔离级别上讲没有解决幻读; 但 mysql 做了一些努力,对于单纯的快照读,解决了幻读;对于单纯的当前读,用next key lock 解决了幻读。但对于快照度读和当前读混用的情况,没有解决幻读

在 MySQL 中可重复读是默认,可不一定是常用的。乐观锁必不可少。降低隔离级别可以提升性能,如果应用层对短暂的不一致无感,也是可以接受的

Expand Down

0 comments on commit f8df2a1

Please sign in to comment.