三亚市网站建设_网站建设公司_后端开发_seo优化
2026/1/7 15:13:45 网站建设 项目流程

关于 RR 级别下的幻读,其实大部分场景都被 MVCC 和 Next-Key Lock 解决了。但在一种特殊情况下,幻读依然存在。

首先要知道只快照读的话只靠MVCC就能防止快读。涉及到当前读加锁就能避免,但是下面这种情况是先快照读,再当前读导致出现的问题。

举个例子: 假设事务 A 开启后,执行了一次 SELECT,生成了快照(Read View)。此时表里只有 id=1。 紧接着,事务 B 插入了一条 id=2 并提交了。 按理说,事务 A 是看不见 id=2 的。 但是,如果事务 A 执行了一句 UPDATE … WHERE id=2,它竟然更新成功了! 更诡异的是,更新完之后,事务 A 再执行 SELECT,就能看见 id=2 了。

这就是典型的当前读打破了快照读的现象。也不是所有的当前读都会这样,主要是UPDATE,或者INSERT导致的唯一键冲突更新,update了后会导致mysql隐藏的行属性里的上一次修改这行的事务id改变为事务A根据MVCC可见性算法就会看到id=2了。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询