隔离级别 | 脏读(Dirty Read) | 不可重复读(NonRepeatable Read) | 幻读(Phantom Read) |
读未提交(Read uncommitted) | 可能 | 可能 | 可能 |
读已提交(Read committed) | 不可能 | 可能 | 可能 |
可重复读(Repeatableread) | 不可能 | 不可能 | 可能 |
可串行化 (Serializable) | 不可能 | 不可能 | 不可能 |
此表为例:
复现脏读
将隔离级别设置为 set tx_isolation='read-uncommitted';
事务A对id=1的数据进行修改,不进行提交。
事务B对id=1的数据进行查询,结果查到了事务A对id=1进行修改后未提交的数据。
这就是脏读。
将隔离级别设置为其他三个验证是否会出现脏读
1.将隔离级别设置为读已提交
-- 读已提交
-- set tx_isolation='read-committed';
没有出现脏读
2.将隔离级别设置为可重复读
-- 可重复读
-- set tx_isolation='repeatable-read';
不会出现脏读
3.将隔离级别设置为串行化
-- 串行化
set tx_isolation='serializable';
串行化会进行阻塞,所以也不会出现脏读。