首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在可重复读取中隔离-Phantom读取

在可重复读取中隔离-Phantom读取
EN

Stack Overflow用户
提问于 2022-09-22 19:00:15
回答 1查看 58关注 0票数 1

,这种特殊情况是属于不可重复的读取类别,还是作为幻影读取?我不认为这个问题是重复的,因为我在任何地方都没有看到过这个案件。

代码语言:javascript
复制
 begin;            
                                   begin;
                                   select * from bancos where id = 2;
delete from bancos where id = 2;  
                                    select * from bancos where id = 2; //same data, expected

commit;
                                select * from bancos where id = 2; //here he should have hidden it because it allows for phantom reads
                                commit;
                                select * from bancos where id = 2; // Eliminated, now yes

我使用的是可重复读取,这就是为什么我认为删除将被认为是幻影读取,因为MySQL中的可重复读取允许幻影读取,因此,我认为在控制台2(右边的)的倒数第二选择中,记录不应该出现(即使不应用提交),因为它是幻影读取,可重复读取允许幻影读取

在一次我理解的更新中

但是,如何用删除来解释上述情况呢?然后将删除视为不可重复的读取,因此只要不提交,它就会出现?

EN

回答 1

Stack Overflow用户

发布于 2022-09-23 00:26:43

隔离级别定义一致性的最低要求,而不是最大要求。

因此,仅仅因为允许重复读取来产生幻影读取,并不意味着它必须这样做。实际上没人想要幻影阅读。您只需在特定的隔离级别接受它们,因为它允许其他事务更快地完成。但是,如果数据库有一种方法来阻止它们(即使代价是让其他事务等待),则允许在任何隔离级别上这样做。

MySQL使用快照技术,它减少了您体验的幻影读取的次数,包括再次读取完全相同的行的情况( MySQL可以显示保存的版本)。

但是,如果您想获得一些幻影读取,请参见this answer,其中插入到另一个会话中的行的更新将生成幻影行。如果您对可序列化的隔离进行同样的操作,则另一个事务中的插入将不得不等待--但按照该隔离级别的要求,不会产生幻影行。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73819520

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档