PostgreSQL 锁命令语法、类型和示例
锁或独占锁或写锁可防止用户修改行或整个表。在 UPDATE
和 DELETE
期间修改的行将在事务期间自动锁定。这将防止其他用户更改该行,直到事务提交或回滚。
当用户都尝试编辑同一行时,他们必须等待其他用户。如果他们以不同的方式更改行,则无需等待。 SELECT 问题无需等待。
数据库自动执行锁定。然而,在某些情况下,必须手动控制锁。可以使用命令 LOCK
来完成手动锁定。这允许定义密钥类型和事务范围。命令
LOCK 的语法 LOCK 的基本语法如下:LOCK [ TABLE ]
name
IN
lock_mode
SQLname
键模式下的名称(带限定符)。如果在表名前指定ONLY
,则仅锁定该表。如果未指定ONLY
,则表和所有子表(如果有)将被锁定。 lock_mode
:锁模式决定这个锁与哪个锁冲突。如果未指定锁定模式,则使用限制性最强的访问模式 ACCESS EXCLUSIVE
。可能的值为:访问共享
、行共享
、行独占
、独占共享、共享独占
, 共享行独占
、独占
、独占访问
。
死锁
LOCK [ TABLE ]
name
IN
lock_mode
SQLname
键模式下的名称(带限定符)。如果在表名前指定ONLY
,则仅锁定该表。如果未指定ONLY
,则表和所有子表(如果有)将被锁定。lock_mode
:锁模式决定这个锁与哪个锁冲突。如果未指定锁定模式,则使用限制性最强的访问模式ACCESS EXCLUSIVE
。可能的值为:访问共享
、行共享
、行独占
、独占共享、
共享独占
,共享行独占
、独占
、独占访问
。
死锁
当两个事务相互等待对方完成操作时,可能会发生死锁。尽管 PostgreSQL 可以通过 ROLLBACK
检测并终止,但死锁仍然会带来不便。为了防止您的应用程序遇到此问题,请确保您的设计方式能够以相同的顺序锁定对象。
咨询锁
PostgreSQL 提供了一种创建具有应用程序定义含义的锁的方法。这就是所谓的咨询锁(advisory lock,英文:advisory lock)。因为系统不强制使用它,所以应用程序会正确使用它。建议锁可用于锁定针对 MVCC 模型的策略。
例如,咨询锁的常见用途是模拟称为“平面文件”的数据管理系统中典型的悲观锁定策略。虽然表中存储的标志可以用于相同的目的,但建议锁定速度更快,这样表就不会臃肿,并且在会话结束时会被服务器自动删除。示例 独家 模式。 锁定数据库中的表yiibai_db
。语句 LOCK
只能在事务模式下使用:
yiibai_db=#BEGIN;
LOCK TABLE company1 IN ACCESS EXCLUSIVE MODE;
SQLPostgreSQL 上述语句将产生以下结果:
LOCK TABLE
Shell 上述消息表明上面的表已被锁定事务结束并完成事务,必须返回或提交事务。 版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。