现在位置:首页 > 数据库 > PostgreSQL > PostgreSQL锁

PostgreSQL锁

来源:原创文章    由 易百 更新版本    浏览:人次

锁或独占锁或写锁,防止用户修改行或整个表。然后,UPDATE和DELETE修改行独占锁定自动的事务的持续时间。这可以防止其他用户更改行,直到该事务被提交或回滚。 yiibai.com

有时候用户必须等待其他用户:当他们正试图修改同一行,如果他们修改不同的行,无需等待。 SELECT查询从来没有等待。
 
数据库自动进行锁定。然而,在某些情况下,锁定必须手动控制。手动锁定可以通过使用LOCK命令。它允许指定的事务的锁的类型和范围。

LOCK命令的语法

LOCK命令的基本语法如下:

yiibai.com

LOCK [ TABLE ]
name
 IN
lock_mode 

yiibai.com

  • name: 锁现有的表的名称(可以有模式修饰)。如果只指定表名前,只有表被锁定。如果未指定,表和所有其派生表(如果有的话)被锁定。 www.yiibai.com

  • lock_mode: 锁模式声明这个锁锁定的冲突。如果没有锁模式被指定,那么ACCESS EXCLUSIVE,最严格的模式使用。可能的值有:ACCESS SHARE,ROW SHARE,ROW EXCLUSIVE,SHARE UPDATE EXCLUSIVE,SHARE,SHARE ROW EXCLUSIVE,EXCLUSIVE,ACCESS EXCLUSIVE。

    yiibai.com

一旦获得,该锁被保持在当前事务。没有UNLOCK TABLE命令的锁总是在事务结尾释放。

死锁

会发生死锁当两个事务都在等待对方完成他们的业务。尽管PostgreSQL可以检测到它们,他们用ROLLBACK结束,死锁仍然会带来不便。为了防止您的应用程序运行到这个问题,确保他们以这样的方式,他们将锁定对象以相同的顺序设计。

yiibai.com

咨询锁

PostgreSQL提供了装置,用于创建应用程序定义的含义的锁。这些被称为咨询锁。由于该系统不强制它们的使用 - 它是由应用程序正确地使用它们。咨询锁可用于锁定策略,是一个尴尬的MVCC模型适合。 www.yiibai.com

例如,咨询锁是一个常见的用途是模拟典型的所谓“平面文件”数据管理系统的悲观锁定策略。可用于同样的目的而存储在表中的标志,咨询锁快,避免表臃肿,并在会话结束时由服务器自动清理。 www.yiibai.com

实例

考虑表COMPANY 有如下记录:

yiibai.com

testdb# select * from COMPANY;
 id | name  | age | address   | salary
----+-------+-----+-----------+--------
  1 | Paul  |  32 | California|  20000
  2 | Allen |  25 | Texas     |  15000
  3 | Teddy |  23 | Norway    |  20000
  4 | Mark  |  25 | Rich-Mond |  65000
  5 | David |  27 | Texas     |  85000
  6 | Kim   |  22 | South-Hall|  45000
  7 | James |  24 | Houston   |  10000
(7 rows)
 

www.yiibai.com

下面的例子锁定本公司表内testdb数据库ACCESS EXCLUSIVE模式。的锁定语句只在的事务模式: www.yiibai.com

testdb=#BEGIN;
LOCK TABLE company1 IN ACCESS EXCLUSIVE MODE;
 
yiibai.com

以上PostgreSQL的表会产生以下结果:

www.yiibai.com

LOCK TABLE
 

www.yiibai.com

上述消息表明,该表已被锁定,直到事务结束并完成的事务,将回滚或提交事务。

yiibai.com

本站文章除注明转载外,均为本站原创或编译
欢迎任何形式的转载,但请务必注明出处,尊重他人劳动,传播学习教程;
转载请注明:文章转载自:易百教程 [http://www.yiibai.com]
本文标题:PostgreSQL锁
转载请保留原文链接:http://www.yiibai.com/html/postgresql/2013/080779.html
上一篇:PostgreSQL事务      下一篇:PostgreSQL子查询