You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL与PostgreSQL中REPEATABLE READ级别下事务快照创建时机问询

MySQL与PostgreSQL中REPEATABLE READ隔离级别的快照创建时机

MySQL(InnoDB引擎)

  • 在REPEATABLE READ隔离级别下,事务的一致性快照不是在BEGIN语句执行时创建,而是在事务执行第一个读写操作(如SELECT、UPDATE、INSERT)时生成。
  • 你观察到的现象属于预期行为:T1启动后未执行任何数据访问操作前,它的视图是数据库的最新状态,因此能看到T2提交的修改;只有当T1执行第一个读写操作后,才会固定住一致性快照,后续操作都基于该快照读取数据,不再看到T2的修改。

PostgreSQL

  • 常规的REPEATABLE READ事务中,快照同样是在事务的第一个数据访问操作(读写均可)执行时创建,BEGIN语句仅完成事务启动,不会触发快照生成。
  • 唯一例外是使用BEGIN TRANSACTION READ ONLY DEFERRABLE语法启动的只读事务,这类事务的快照会在BEGIN时生成,但这是特殊场景,不影响常规REPEATABLE READ事务的行为。因此你观察到的现象也是PostgreSQL的预期设计。

总结

两者的这种行为都是官方设计的预期结果,核心逻辑是:事务的一致性快照绑定的是首次数据访问操作,而非事务启动语句。这样设计既能避免事务启动后长时间闲置占用快照资源,也能让事务在真正需要一致性视图时才生成快照,平衡资源占用与隔离需求。

内容的提问来源于stack exchange,提问作者Mohamed Kamal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 14:52:01