New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
对于“不可重复读的重点是修改,幻读的重点在于新增或者删除”存在的问题,以及幻读的理解? #1763
Comments
简单谈谈我的理解哈,欢迎一起探讨。 不可重复读和幻读有什么区别呢?
幻读其实可以看作是不可重复读的一种特殊情况,单独把区分幻读的原因主要是解决幻读和不可重复读的方案不一样。 举个例子:执行 |
hi |
在数据库的ACID(原子性、一致性、隔离性、持久性)特性中,不可重复读和幻读是两种由于并发事务引起的数据读取问题,它们主要发生在数据库的隔离级别设置上,尤其是在读已提交(Read Committed)和可重复读(Repeatable Read)隔离级别下。 不可重复读(Non-repeatable Read)指的是在一个事务内,多次读取同一数据集合时,由于其他事务对数据集合的修改或删除操作,导致同一事务内的多次读取结果不一致。简单来说,就是一个事务第一次读取某行数据后,另一事务修改了该数据并提交,当前事务再次读取时发现数据发生了改变。 幻读(Phantom Read)则是指在同一个事务中,多次执行相同的查询操作时,由于其他事务进行了插入操作,导致后续的查询返回了之前不存在的行。也就是说,一个事务执行了一次查询操作,得到了一组结果集,另一个事务插入了一些新行,这时原先的事务再次执行同样的查询,就会得到一个包含了新行的结果集,好像这些行是“幻影”一样突然出现。 本质区别在于:
可以参考MySQL官方文档中的解释: |
问题描述:
在参考文章中,对不可重复读和幻读的理解如下图所示。
而总结正文是这样描述的。
图中先使用快照读,然后使用当前读,两次结果不一致,就说是幻读。但是根据上面的参考文章, 快照读和当前读混用造成的异常,不能算是幻读。
希望答疑解惑!
The text was updated successfully, but these errors were encountered: