Mysql:如何在事务中获得S锁

时间:2014-05-28 09:57:29

标签: mysql

我尝试使用以下SQL获取S锁:

start transaction;
  SELECT * FROM test.t1 where id=1;

但我发现这种方式不起作用。我把它改成如下:

start transaction;
  SELECT * FROM test.t1 where id=1 lock in share mode;

我想知道为什么第一种方法没有得到S锁?

我已设置autocommit=0;

1 个答案:

答案 0 :(得分:0)

  

在表格上,InnoDB通常只获取有意共享(LOCK_IS)或有意独占(LOCK_IX)模式。除非通过LOCK TABLES命令明确请求,否则它不会以共享模式(LOCK_S)或独占模式(LOCK_X)锁定表。

如“表级事务锁定”一节中所述here(我假设您的表是InnoDB)。

至于你关于何时授予共享锁的评论的答案,它在另一行的同一篇文章中:

  

一个例外是在线alter table命令的准备阶段,其中表以共享模式锁定