mysql之脏读、不可重复读、幻读的区别及说明
作者:WalkerShen
这篇文章主要介绍了mysql之脏读、不可重复读、幻读的区别及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
mysql脏读、不可重复读、幻读的区别
脏读(Drity Read)
某个事务已更新一份数据,另一个事务在此时读取了同一份数据,由于某些原因,
前一个RollBack了操作,则后一个事务所读取的数据就会是不正确的。
例如:
- 一开始小明将数据A修改成了B,之后这个时候小红读取了B
- 但是由于小明将数据回滚了,修改成了A
- 那么在这个时间点,小红拿的数据就是错误的了,正确的数据应该为A
不可重复读(Non-repeatable read)
在一个事务的两次查询之中数据不一致,这可能是两次查询过程中间插入了一个事务更新的原有的数据。
例如:
- 小明一开始查询数据时A,但是后面查询的数据是B
- 因为中途小红将数据改成了B
- 这个时候就是两次查询数据不一致的问题
幻读(Phantom Read)
- 在一个事务的两次查询中数据笔数不一致
- 例如有一个事务查询了几列(Row)数据,而另一个事务却在此时插入了新的几列数据
- 先前的事务在接下来的查询中,就会发现有几列数据是它先前所没有的
例如:
- 一开始小明修改了全部数据,5条数据,然后小红在过程中新增了2条数据,然后小明再次查询的时候
- 发现我不是已经改了全部的数据5条了吗,为什么又多出了两条多余的数据
- 有点产生幻觉的意思,所以就是幻读了
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。