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

嵌套SELECT语句中使用FOR SHARE,是否会对table_a返回行加行锁?

问题解答

先看你提供的SQL语句(已修正语法错误,补上缺失的from):

WITH candidate AS (
   select * from table_a where flag = 'a'
)
select * from candidate where other_flag = 'b' for share

会对table_a中同时满足flag = 'a'和other_flag = 'b'的行添加SHARE行锁。

在支持CTE和FOR SHARE语法的数据库(比如PostgreSQL)中,这种写法里的CTE并非预先把结果取出存为临时表,而是会和主查询合并执行。当主查询带上FOR SHARE锁指令时,数据库会直接对底层基表table_a中最终被筛选出来的目标行施加共享锁——不管是通过CTE、子查询还是其他嵌套方式,只要最终返回的行来自基表,锁就会作用到基表的对应行上。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 00:40:22