锁或独占锁或写锁,防止用户修改行或整个表。然后,UPDATE和DELETE修改行独占锁定自动的事务的持续时间。这可以防止其他用户更改行,直到该事务被提交或回滚。 yiibai.com
LOCK命令的基本语法如下:
LOCK [ TABLE ] name IN lock_modeyiibai.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。
一旦获得,该锁被保持在当前事务。没有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 TABLEwww.yiibai.com
上述消息表明,该表已被锁定,直到事务结束并完成的事务,将回滚或提交事务。
yiibai.com