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

读提交(READ-COMMITTED)事务中每个WITH查询是否算作独立命令?

结论

你示例中的WITH子句里的两个SELECT查询属于单个SQL命令,在READ COMMITTED(读提交)隔离级别下,不会出现两个查询读取到不同行的情况。

原理说明

  • PostgreSQL的READ COMMITTED隔离级别规则明确:单个SQL命令执行的全程,只会使用命令启动瞬间生成的、已提交数据的一致性快照,命令执行过程中其他事务提交的修改,对当前命令完全不可见。
  • 你给出的代码中,包含WITH子句的整段SELECT逻辑是一条独立的SQL命令,foo、bar两个CTE里的查询都是这条命令的组成部分,共享同一个快照,因此两次对表t1的查询读到的是完全一致的数据。

对比:会出现不可重复读的场景

只有事务内执行两条独立的SELECT命令时,才会因为每条命令单独获取新快照,出现前后两次查询结果不一致的情况:

BEGIN;
-- 第一条独立SELECT,生成快照1
SELECT * FROM t1;
-- 执行间隙如果有其他事务修改t1并提交,第二条SELECT会生成包含新修改的快照2
SELECT * FROM t1;
COMMIT;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 10:36:04