PostgreSql 行级锁

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

我正在尝试了解 Postgresql 行级锁,有人可以帮助我了解何时使用每种类型的锁。

     FOR UPDATE; FOR NO KEY UPDATE; FOR SHARE; FOR KEY SHARE;

我尝试查看文档,但仍然无法理解其中的区别,也不知道何时使用什么以及它如何产生影响。

我期待有人可以帮助我了解每种锁的用例,并让我清楚何时选择每种锁。

sql postgresql locking rowlocking mvcc
1个回答
0
投票
  • 如果您计划删除某行或更新属于主键或唯一约束的列,请在

    FOR UPDATE
    模式下锁定该行

  • 如果您计划仅更新不属于主键或唯一约束的列,请在

    FOR NO KEY UPDATE
    模式下锁定行

  • 如果您不希望其他人修改某行,请将其锁定在

    FOR SHARE
    模式下(这是一个非常罕见的要求)

  • 如果您想阻止其他人删除该行或更新属于主键或唯一约束的列(也是一个非常罕见的要求),请在

    FOR KEY SHARE
    模式下锁定该行

很难想出一个需要您明确使用

FOR SHARE
FOR KEY SHARE
的用例;它们被视为内部数据库,以确保不违反外键约束。

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