LOCK TABLE 语句

说明 

此语句用于防止其它并发事务访问或修改表。

语法 

LOCK TABLE table-name
WITH HOLD ]
IN { SHARE | EXCLUSIVE } MODE

参数 

table-name    表必须是基表,而不是视图。因为临时表数据是当前连接的本地数据,所以锁定全局临时表或局部临时表都无效。

WITH HOLD 子句    如果指定该子句,锁一直保持到连接结束时。如果没有指定该子句,则提交或回退当前事务时将释放锁。

SHARE 模式    禁止其它事务修改表,但允许它们读取表。在该模式下,只要没有其它的事务锁定所修改的行,就可以间接地或显式地使用 LOCK TABLE 更改表中的数据。

EXCLUSIVE 模式    禁止其它事务访问表。任何其它事务都不能对表执行查询、任何更新或任何其它操作。如果用 LOCK TABLE t IN EXCLUSIVE MODE 排它性地锁定表 t,则服务器的缺省行为是不获取 t 的行锁定。将 SUBSUME_ROW_LOCKS 选项设置为 OFF 可以禁用此行为。

用法 

LOCK TABLE 语句允许直接控制表级并发,与当前的隔离级别无关。

虽然事务的隔离级别通常控制当前事务执行请求时设置的锁的种类,但 LOCK TABLE 语句允许更显式地控制表行的锁定。

LOCK TABLE 以 SHARE 模式放置的锁为幻像和防幻像锁,sa_locks 过程将它们显示为 PT 和 AT。

权限 

若要以 SHARE 模式锁定表,需要 SELECT 权限。

若要以 EXCLUSIVE 模式锁定表,必须是表所有者或者有 DBA 权限。

副作用 

需要访问锁定表的其它事务可能被延迟或阻塞。

另请参见 
标准和兼容性 
  • SQL/92    供应商扩展。

  • SQL/99    供应商扩展。

  • Sybase    受 Adaptive Server Enterprise 支持。Adaptive Server Enterprise 不支持 WITH HOLD 子句。Adaptive Server Enterprise 提供 Adaptive Server Anywhere 不支持的 WAIT 子句。

示例 

下面的语句禁止其它事务在当前事务期间修改 customer 表:

LOCK TABLE customer
IN SHARE MODE
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值