我正在尝试了解 Postgresql 行级锁,有人可以帮助我了解何时使用每种类型的锁。
FOR UPDATE; FOR NO KEY UPDATE; FOR SHARE; FOR KEY SHARE;
我尝试查看文档,但仍然无法理解其中的区别,也不知道何时使用什么以及它如何产生影响。
我期待有人可以帮助我了解每种锁的用例,并让我清楚何时选择每种锁。
如果您计划删除某行或更新属于主键或唯一约束的列,请在
FOR UPDATE
模式下锁定该行
如果您计划仅更新不属于主键或唯一约束的列,请在
FOR NO KEY UPDATE
模式下锁定行
如果您不希望其他人修改某行,请将其锁定在
FOR SHARE
模式下(这是一个非常罕见的要求)
如果您想阻止其他人删除该行或更新属于主键或唯一约束的列(也是一个非常罕见的要求),请在
FOR KEY SHARE
模式下锁定该行
很难想出一个需要您明确使用
FOR SHARE
和 FOR KEY SHARE
的用例;它们被视为内部数据库,以确保不违反外键约束。