LOCK TABLE

说明

以指定的模式锁定一个或多个表

语法

lock_table ::=

参数

schema

指定包含表或视图的模式。如果省略模式,则将假定表或视图位于自己的模式中。

table | view

指定要锁定的表或视图的名称。如果指定视图,将锁定视图的基表。

dblink

指定一个到远程数据库的数据库链接,该链接指向表或视图所在的位置。由LOCK TABLE语句锁定的所有表必须位于同一个数据库上。如果省略dblink,将假定表或视图位于本地数据库上。

lockmode

指定以下模式之一:
ROW SHARE
ROW SHARE允许对锁定的表进行并发访问,但禁止用户锁定整个表以进行独占访问。ROW SHARE与SHARE UPDATE同义。
ROW EXCLUSIVE
ROW EXCLUSIVE与ROW SHARE相同,但它还禁止在SHARE模式下进行锁定。ROW EXCLUSIVE在更新、插入或删除时,将自动获取行独占锁定。
SHARE UPDATE
参见ROW SHARE。
SHARE
SHARE允许并发查询,但禁止对锁定的表进行更新。
SHARE ROW EXCLUSIVE
SHARE ROW EXCLUSIVE用于查看整个表并允许其他人查看表中的行,但禁止其他人在SHARE模式下锁定表或更新行。
EXCLUSIVE
EXCLUSIVE允许对锁定的表进行查询,但禁止对其进行任何其他活动。
NOWAIT
如果希望数据库立即将控制返回,而指定的表已被另一个用户锁定,则指定NOWAIT。在这种情况下,数据库将返回一条消息,指示该表已被另一个用户锁定。
WAIT
使用WAIT子句指示LOCK TABLE语句等待获取锁的时间,最多等待指定的秒数。

如果既不指定NOWAIT也不指定WAIT,那么数据库将无限期等待直到表可用,然后将其锁定并将控制权返回。

注解

配置参数AutoCommit为TRUE时,LOCK TABLE只能在显式事务或PL中执行。AutoCommit为FALSE时,默认已经在一个事务中,不报错。

示例

CREATE TABLE T1 (X INT);

--在事务块中对T1表加EXCLUSIVE锁
BEGIN;
    LOCK TABLE T1 IN EXCLUSIVE MODE;
COMMIT;

--在PL中对T1表加EXCLUSIVE锁
BEGIN
    LOCK TABLE T1 IN EXCLUSIVE MODE;
END;
/