禁止其它并发事务在指定时间内访问或修改表或由较早事务释放的锁。
快速链接:
转至参数
转至示例
转至用法
转至标准
转至权限
LOCK TABLE table-list [ WITH HOLD ]
IN { SHARE | WRITE | EXCLUSIVE } MODE [ WAIT
table-list
[ ] [ , [ ] , ...]
table-name 必须是基表,而不是视图。WRITE 模式仅对 IQ 基表有效。LOCK TABLE 要么锁定表列表中的所有表,要么不锁定任何表。必须为该表启用行级版本控制 (RLV)。当为 SAP SQL Anywhere 表获取锁,或者当获取 SHARE 或 EXCLUSIVE 锁时,只能指定一个表。使用标准 SAP IQ 对象限定规则分析 <table-name>。
TABLE 更改表中的数据。
TABLE IN WRITE MODE 语句建立的,而是通过执行 SAP IQ 处理的下一命令建立的。 当事务提交或回退或者断开连接时,会解除 WRITE 模式锁。
time 指定所有锁类型的最大阻塞时间。当锁定模式为 WRITE 时,此子句为必填。给定时间参数后,仅当服务器在指定时间内可用时,其才会锁定指定表。可以使用 hh:nn:ss:sss 格式指定时间参数。如果指定了日期部分,服务器将忽略此部分,并将参数转换为时间戳。如果未给定时间参数,服务器将无限期等待,直到 WRITE 锁可用或发生中断为止。
TABLE Customers, Employees IN WRITE MODE WAIT'00:05:03'
TABLE Customers, Employees IN WRITE MODE WAIT
在 Multiplex 上,只有协调器支持 LOCK TABLE。
在协调器的 IQ 主存储库中的表上运行 LOCK TABLE 语句,不会影响从次级服务器上的连接访问这些表。例如:
在协调器连接上,发出命令:
LOCK TABLE coord1 WITH HOLD IN EXCLUSIVE MODE协调器上的 sp_iqlocks 会确认表 coord1 具有排它 (E) 锁。
在辅助服务器的连接上运行的 sp_iqlocks 的结果不会显示表 coord1 上的排它锁。此连接上的用户可查看协调器上表 coord1 的更新。
协调器上的其它连接可查看 coord1 表上的排它锁,如果尝试通过协调器上的其它连接从 coord1 表中进行选择,则将返回 User DBA has the row in coord1 locked(用户 DBA 具有在 coord1 中锁定的行)。
不支持在视图上执行 LOCK TABLE。尝试锁定视图将获取共享模式锁,而不管命令中指定的模式如何。共享模式锁会阻止其它事务修改表模式。
Transact-SQL (T-SQL) 存储过程方言不支持 LOCK TABLE。例如,此语句返回 LOCK 附近的语法错误:
CREATE PROCEDURE tproc()
AS
BEGIN
COMMIT;
LOCK TABLE t1 IN SHARE MODE
INSERT INTO t1 VALUES(30)
END
Watcom-SQL 存储过程方言支持 LOCK TABLE。缺省命令分隔符为分号 (;)。例如:
CREATE PROCEDURE tproc()
AS
BEGIN
COMMIT;
LOCK TABLE t1 IN SHARE MODE
INSERT INTO t1 VALUES(30)
END
要在 SHARE 模式中锁定表,您必须是该表的所有者或者具有以下其中一种特权:
SELECT 对象级特权
SELECT ANY TABLE 系统特权
要在 EXCLUSIVE 模式中锁定表,您必须是该表的所有者或者具有以下其中一种特权:
ALTER ANY OBJECT 系统特权
ALTER ANY TABLE 系统特权
ALTER 对象级特权