我尝试使用以下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;
答案 0 :(得分:0)
在表格上,InnoDB通常只获取有意共享(LOCK_IS)或有意独占(LOCK_IX)模式。除非通过LOCK TABLES命令明确请求,否则它不会以共享模式(LOCK_S)或独占模式(LOCK_X)锁定表。
如“表级事务锁定”一节中所述here(我假设您的表是InnoDB)。
至于你关于何时授予共享锁的评论的答案,它在另一行的同一篇文章中:
一个例外是在线alter table命令的准备阶段,其中表以共享模式锁定