锁
在多个用户访问数据库的时候若对并发操作不加控制就可能会读取和存储不正确的数据,破坏数据库的 一致性。这个时候便可以通过锁来阻止用户修改一行或整个表,以保持数据库数据的一致性,锁一般用 在并发较高的数据库中。
数据库中有两种基本的锁:排它锁(Exclusive Locks)和共享锁(Share Locks)。 如果数据对象加上排它锁,则其他的事务不能对它读取和修改。 如果加上共享锁,则该数据库对象可以被其他事务读取,但不能修改。
LOCK 命令基础语法如下:
LOCK [ TABLE ] name
IN
lock_mode
name:要锁定的现有表的名称。如果只在表名之前指定,则只锁定该表。如果未指定,则锁定该 表及其所有子表。 lock_mode:锁定模式指定该锁与哪个锁冲突。如果没有指定锁定模式,则使用限制最大的访问独 占模式。可能的值是:ACCESS SHARE,ROW SHARE, ROW EXCLUSIVE, SHARE UPDATE EXCLUSIVE, SHARE,SHARE ROW EXCLUSIVE,EXCLUSIVE,ACCESS EXCLUSIVE。
一旦获得了锁,锁将在当前事务中保持,直到事务结束时释放。 当两个事务彼此等待对方完成其操作时,可能会发生死锁。为了防止应用程序遇到这个问题,请确保将 应用程序设计为以相同的顺序锁定对象。
例如我们将数据库中的 department表锁定为 ACCESS EXCLUSIVE 模式。 LOCK 语句只在事务模式下工作,所以我们要先通过BEGIN开始一个事务。
上面的操作将得到LOCK TABLE的结果,表示会保持锁定直到事务结束,要完成这个事务,我们必须提 交或者回滚这个事务。




