0%

不可重复读和幻读的区别

最近在看MySql事务隔离级别时,脏读、幻读、不可重复读这三个概率里,后两者较难区分,这里看到美团技术团队的一篇文章中对此进行的解释,感觉恍然大悟,这里记录一下。

概念

脏读

脏读指的是事务A在进行查询时,读到了事务B对查询结果中某行数据还未提交的修改,而由于事务B执行失败进行回滚,导致这一修改被撤销,这一现象称为脏读。

幻读

幻读指一个事务读取2次,得到的记录不一致。

不可重复读

不可重复读指一个事务读取同一条记录2次,得到的结果不一致。

区别

不可重复读重点在update和delete,而幻读的重点在于insert
如果使用锁机制来实现者两种隔离级别,在可重复读中,该sql第一次读取到数据时,就对这些数据行进行加锁,那么其他事务无法修改这些数据,那么就可以实现可重复读了
但这种加锁方式却无法阻止insert的数据,也就是无法阻止幻读

-------------------本文结束 感谢阅读-------------------