46 lines
1019 B
Markdown
46 lines
1019 B
Markdown
|
|
# 隔离级别
|
||
|
|
|
||
|
|
- 读未提交
|
||
|
|
- 未提交事务的修改可见
|
||
|
|
- 读提交
|
||
|
|
- 提交事务的修改可见
|
||
|
|
- 可重复读
|
||
|
|
- 事务启动时看到数据保持一致
|
||
|
|
- 串行化
|
||
|
|
- 阻塞执行
|
||
|
|
|
||
|
|
**用于解决的问题**
|
||
|
|
|
||
|
|
- 脏读
|
||
|
|
- 读到未提交事务修改的数据
|
||
|
|
- 读提交解决此问题
|
||
|
|
- 不可重复读
|
||
|
|
- 在事务中多次读取数据不一致
|
||
|
|
- 可重复读解决此问题
|
||
|
|
- 幻读
|
||
|
|
- 多次查询符合某个条件的记录数不一致
|
||
|
|
- 串行化解决此问题
|
||
|
|
|
||
|
|
**具体实现**
|
||
|
|
|
||
|
|
- 读未提交
|
||
|
|
- 每次读取最新数据
|
||
|
|
- 读提交
|
||
|
|
- 每个语句执行前 `Read View`
|
||
|
|
- 可重复读
|
||
|
|
- 事务开始时 `Read View`
|
||
|
|
- 串行化
|
||
|
|
- 加读写锁
|
||
|
|
|
||
|
|
**Read View**
|
||
|
|
|
||
|
|

|
||
|
|
|
||
|
|
事务划分——
|
||
|
|
- 已提交事务
|
||
|
|
- `trx_id < min_trx_id`
|
||
|
|
- 活跃事务
|
||
|
|
- `min_trx_id <= trx_id < max_trx_id`
|
||
|
|
- 未开始事务
|
||
|
|
- `trx_id >= max_trx_id`
|