如何理解FOR UPDATE OF my_table?

问题描述 投票:0回答:1

我使用 Spring Data Jpa 来处理 Postgres 数据库。访问数据库时,会生成以下查询:

select
    user0_.user_id as user_id1_0_,
    user0_.birthday as birthday2_0_,
    user0_.username as username3_0_ 
from
    users user0_ 
where
    user0_.username=$1
limit $2
for update of user0_ skip locked

网上的例子通常会在

for update of
后面指定列,但查询时这里指定的是表。在这种情况下什么会被阻止?整排?

postgresql locking select-for-update
1个回答
0
投票

虽然

FROM
子句仅包含单个表(示例中的
users AS user0_
),但
FOR UPDATE OF user0_
和简单的
FOR UPDATE
之间实际上没有区别。但这对于
FROM
子句中的多个表来说是有区别的。
手册深入解释:

如果在锁定子句中指定了特定表,则只有行 来自那些被锁定的表;中使用的任何其他表

SELECT
照常简单地阅读。没有表的锁定子句 list 影响语句中使用的所有表。如果锁定子句是 应用于视图或子查询,它会影响视图中使用的所有表 或子查询。但是,这些条款不适用于
WITH
查询 由主查询引用。如果您希望发生行锁定 在
WITH
查询中,在
WITH
中指定锁定子句 查询。

不,你不能在 Postgres 中列出列。只有桌子。 Postgres 使用此子句锁定选定的行。不是专栏。

© www.soinside.com 2019 - 2024. All rights reserved.