LOCK TABLE 语句

原创 2006年06月06日 15:24:00
说明 

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

语法 

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

MySQL的lock tables和unlock tables的用法(转载)

早就听说lock tables和unlock tables这两个命令,从字面也大体知道,前者的作用是锁定表,后者的作用是解除锁定。但是具体如何用,怎么用,不太清楚。今天详细研究了下,总算搞明白了2者的...
  • sunhuaquan
  • sunhuaquan
  • 2011年02月23日 15:21
  • 35424

MySQL表共享读锁(Table Read Lock)和表独占写锁(Table Write Lock)

-- 表锁 -- 查看哪些表被锁 show open TABLES -- 创建一个张表演示表锁,使用myisam存储引擎 CREATE table test_lock( id int, n...
  • weixin_37817685
  • weixin_37817685
  • 2017年05月13日 23:30
  • 1067

LOCK TABLE 语句

说明 此语句用于防止其它并发事务访问或修改表。语法 LOCK TABLE table-name[ WITH HOLD ]IN { SHARE | EXCLUSIVE } MODE参数 table-na...
  • psongchao
  • psongchao
  • 2006年06月06日 15:24
  • 9561

MySql中Lock命令和unlock命令

在同一个连接当中,执行了一次lock table之后,如果再次执行lock table,那么之前被锁住的表就自动解锁了。 下面这张图可以证明: ------------------------...
  • imzoer
  • imzoer
  • 2012年12月12日 15:07
  • 19823

MySQL权限篇之LOCK TABLES及元数据锁

mysql lock table Metadata Locking
  • q3dxdx
  • q3dxdx
  • 2016年03月29日 10:20
  • 787

mysql lock table/unlock table 表锁/解锁

在某个地方看到有个例子,具体描述类似如下:商店现在某商品只有1件库存,然后A与B在网上进行下订,A与B几乎同时(或许也就差几毫秒,A比B快那么一点点)进行。 很明显是只有A才能成功下单的,B则会...
  • weixin_29778143
  • weixin_29778143
  • 2017年02月07日 14:53
  • 494

ORACLE 中的lock 机制

为了进行LOCK的探究,我建立了一个测试表 test ,结构和测试数据如下:SQL> select * from test;        ID NAME---------- ----------  ...
  • robinson1988
  • robinson1988
  • 2009年10月15日 14:00
  • 9927

MySql中表锁Lock命令和unlock命令

MySQL LOCK 命令的语法如下 LOCK TABLE table1 locktype, table2 locktype ... 对一个表解锁: UNLOCK TABLE[S] ...
  • caomiao2006
  • caomiao2006
  • 2016年07月31日 20:27
  • 3962

oracle手动锁表

[转载]oracle手动锁表  手工锁表: lock table tbl_t1 in row share mode nowait;               ...
  • haiross
  • haiross
  • 2015年06月04日 08:41
  • 3454

锁表原因及解决思路

1、锁表发生在insert  update 、delete 中    2、锁表的原理是 数据库使用独占式封锁机制,当执行上面的语句时,对表进行锁住,直到发生commite 或者 回滚 或者退出数据库...
  • u011194983
  • u011194983
  • 2016年10月26日 09:16
  • 6113
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:LOCK TABLE 语句
举报原因:
原因补充:

(最多只允许输入30个字)