嵌套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
相关产品推荐
相关产品推荐

