行级锁 · FNKU
FOR NO KEY UPDATE
非键更新锁
用于不修改键值的更新;与键共享锁兼容,与其余行锁模式冲突。
冲突关系
以下只比较不同事务在同一行上持有的锁。
与这些模式冲突 3
与这些模式兼容 1
纵轴是请求的锁,横轴是另一事务已经持有的锁;只比较同一对象。
取得此模式的命令
| SQL 命令 | 取得条件与说明 |
|---|---|
| SELECT FOR NO KEY UPDATE | 作用于实际选中的行;目标表同时取得 ROW SHARE。NOWAIT / SKIP LOCKED 改变等待行为,不改变锁冲突规则。 |
| UPDATE(不修改键值) | 没有取得 FOR UPDATE 的 UPDATE 使用此模式。此处的键列是可供外键引用的唯一索引列,不包括部分索引与表达式索引。 |
| MERGE … WHEN MATCHED THEN UPDATE(非键) | 实际执行 UPDATE 分支且不需 FOR UPDATE 时;不能给所有 MERGE 分支统一套用一种行锁。 |
| INSERT … ON CONFLICT DO UPDATE(非键) | 冲突路径锁住要更新的已有行;锁强度按 UPDATE 的键列规则确定,即使 DO UPDATE WHERE 排除更新也会锁行。 |
链接指向本站 PostgreSQL 18 的 SQL 命令百科。命令也可能取得其他锁,查看完整命令关联表。
其他锁模式
数据来源
当前查看 PostgreSQL 18,采样构建 REL_18_STABLE · 753057e340da。冲突关系与命令行为按该版本的文档和源码整理。命令链接进入本站 SQL 命令百科,并保留所选版本。
资料核验日期:2026-09-26。