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;
/