隔离级别 | 脏读(Dirty Read | 不可重复读(NonRepeatable Read) | 幻读(Phantom Read) |
---|---|---|---|
未提交读(Read uncommitted) | ✓ | ✓ | ✓ |
已提交读(Read committed) | × | ✓ | ✓ |
可重复读(Repeatable read) | × | × | ✓ |
可串行化(Serializable ) | × | × | × |
✓ 可能 × 不可能
脏读
原始数据为1
时间线 | 事务1 | 事务2 |
---|---|---|
1 | 修改数据为2 | |
2 | (未提交) | 查询数据会得到2 |
不可重复读
原始数据为1
时间线 | 事务1 | 事务2 |
---|---|---|
0 | 查询数据得到1 | |
1 | 修改数据为2 | |
2 | 提交 | |
3 | 查询数据会得到2 |
幻读
原始数据为空
时间线 | 事务1 | 事务2 |
---|---|---|
0 | 查询主键为1的是否存在,得知不存在 | |
1 | 插入主键为1的数据 | |
2 | 提交 | |
3 | 插入主键为1的数据报错 |