假设我试图在一个查询中锁定table1
和table2
,但是table2
已经被锁定了。MySQL是会保持table1
上的锁并阻塞,直到它可以锁定table2
,还是只有当它可以在两个表上获得锁时才能锁定table1
?
如果这很重要,请假设InnoDB存储引擎。
我刚刚在同一页上找到了以下语句:
当会话已经获得写锁,并且正在等待为锁表列表中的下一个表获取锁时,所有其他会话都等待释放写锁。
这是否证实了MySQL在持有table1
锁时会阻塞?如果是这样的话,是否有一种方法来查询MySQL,使其在失败的情况下立即返回,而不是在无法获取所有表锁时阻塞?
发布于 2015-07-06 21:31:54
除非您有非常特殊的需要,否则不要将LOCK TABLES
与InnoDB结合使用。
相反,学习“事务”并使用BEGIN
.COMMIT
实现最需要的“锁定”。另见SELECT ... FOR UPDATE...
。
https://dba.stackexchange.com/questions/106049
复制相似问题