可重复读里一直读到旧值,这不是有问题吗

93次阅读
没有评论

从“实时性”角度看,这确实不够新;但从“事务内结果稳定”角度看,这正是可重复读想要的效果。

为什么它会读到旧值

因为普通查询走的是快照读。事务第一次形成一致性视图后,后续普通 select 会继续基于这份视图读取,所以别人已经提交的新值,你暂时看不到。

为什么数据库还要这样设计

因为很多业务更怕“前后两次统计口径变了”。报表、批量结算、复杂事务处理时,如果同一事务里看到的数据一直跳动,逻辑反而更难保证正确。

那会不会把数据改错

通常不会。因为真正执行 update 这类写操作时,数据库会做当前读,基于最新可写版本处理,不是机械地拿快照里的旧值直接覆盖。

什么时候它不合适

库存扣减、抢购、余额判断这类特别强调最新状态的场景,往往需要当前读或更明确的并发控制,而不是只依赖快照读结果做决策。

结论

可重复读不是追求“你看到的一定最新”,而是追求“同一事务里你看到的口径保持一致”。

正文完
 0
bdspAdmin
版权声明:本站原创文章,由 bdspAdmin 于2026-03-25发表,共计378字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)