我对MySQL表锁有一点好奇。
假设我想锁定两个表。我执行以下命令:
LOCK TABLES table1 WRITE, table2 WRITE然后,我通过执行以下命令检查这些表是否确实已被锁定:
SHOW OPEN TABLES IN mydatabase WHERE In_use > 0我已经注意到,如果我依次运行两个lock命令,例如:
LOCK TABLES table1 WRITE
LOCK TABLES table2 WRITE然后使用相同的命令检查哪些表被锁定,只有table2被标记为已锁定。为何会这样呢?
谢谢
发布于 2013-02-09 00:24:44
LOCK TABLES不是事务安全的,它会在尝试锁定表之前隐式提交任何活动事务。
因此,在第一种情况下,您有一个事务,它锁定了两个表,而在第二种情况下,因为LOCK TABLES table1 WRITE已经提交,所以只有一个表被锁定
发布于 2015-11-20 07:09:58
lock tables将首先解锁当前会话锁定的所有表,然后再执行指定的锁定。因此,对锁定表2的调用是解锁表1。
https://stackoverflow.com/questions/14772762
复制相似问题