此语句用于防止其它并发事务访问或修改表。
LOCK TABLE table-name [ WITH HOLD ] IN { SHARE | EXCLUSIVE } MODE
table-name 表的名称。表必须是基表,而不是视图。因为临时表数据是当前连接的本地数据,所以锁定全局临时表或本地临时表都无效。
WITH HOLD 子句 指定此子句可将表锁定,直到连接结束时为止。如果未指定此子句,则提交或回退当前事务时将释放锁定。
SHARE MODE 子句 指定此子句可获取表上的共享表锁,从而阻止其它事务修改此表,但允许它们对此表进行读取访问。如果事务在表上放置了共享锁,则它可以修改表中的数据,前提是没有其它事务持有对所修改行的任意类型的锁。
EXCLUSIVE MODE 子句 指定此子句可获取表上的独占表锁,从而阻止其它事务访问此表。任何其它事务都不能对该表执行查询、更新或任何其它操作。如果使用语句(例如 LOCK TABLE...IN EXCLUSIVE MODE
)以独占方式锁定表,则缺省行为是不获取表的行锁定。通过将 subsume_row_locks 选项设置为 Off 可以禁用此行为。
LOCK TABLE 语句允许直接控制表级并发,与当前的隔离级别无关。
虽然事务的隔离级别通常控制当前事务执行请求时设置的锁的种类,但 LOCK TABLE 语句允许更显式地控制表行的锁定。
不能对视图执行 LOCK TABLE 语句。但是,如果对基表执行 LOCK TABLE 语句,就会创建一个共享模式锁,它会锁定相关的视图。共享模式锁会一直存在,直到事务被提交或回退为止。
若要以 SHARE 模式锁定表,需要 SELECT 权限。
若要以 EXCLUSIVE 模式锁定表,则必须是表所有者或者有 DBA 权限。
需要访问锁定表的其它事务可能被延迟或阻塞。
SQL/2003 服务商扩充。
以下语句禁止其它事务在当前事务期间修改 Customers 表:
LOCK TABLE Customers IN SHARE MODE; |
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |