,这种特殊情况是属于不可重复的读取类别,还是作为幻影读取?我不认为这个问题是重复的,因为我在任何地方都没有看到过这个案件。
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(右边的)的倒数第二选择中,记录不应该出现(即使不应用提交),因为它是幻影读取,可重复读取允许幻影读取。
在一次我理解的更新中

但是,如何用删除来解释上述情况呢?然后将删除视为不可重复的读取,因此只要不提交,它就会出现?
发布于 2022-09-23 00:26:43
隔离级别定义一致性的最低要求,而不是最大要求。
因此,仅仅因为允许重复读取来产生幻影读取,并不意味着它必须这样做。实际上没人想要幻影阅读。您只需在特定的隔离级别接受它们,因为它允许其他事务更快地完成。但是,如果数据库有一种方法来阻止它们(即使代价是让其他事务等待),则允许在任何隔离级别上这样做。
MySQL使用快照技术,它减少了您体验的幻影读取的次数,包括再次读取完全相同的行的情况( MySQL可以显示保存的版本)。
但是,如果您想获得一些幻影读取,请参见this answer,其中插入到另一个会话中的行的更新将生成幻影行。如果您对可序列化的隔离进行同样的操作,则另一个事务中的插入将不得不等待--但按照该隔离级别的要求,不会产生幻影行。
https://stackoverflow.com/questions/73819520
复制相似问题