我对MySQL表锁有一点小小的好奇心。
说我想要锁定两个表。我执行这个命令:
LOCK TABLES table1 WRITE, table2 WRITE
然后我通过执行:
检查表是否确实被锁定了SHOW OPEN TABLES IN mydatabase WHERE In_use > 0
我注意到如果我后续运行两个锁定命令,例如:
LOCK TABLES table1 WRITE
LOCK TABLES table2 WRITE
然后使用相同的命令检查哪些表被锁定只有table2被标记为已锁定。为什么会这样?
由于
答案 0 :(得分:8)
LOCK TABLES不是事务安全的,并且在尝试锁定表之前隐式提交任何活动事务。
因此,在第一种情况下,您有一个事务可以锁定2个表,而第二个只有一个,因为LOCK TABLES table1 WRITE
已被提交
答案 1 :(得分:0)
在执行指定的锁之前,锁定表将首先解锁当前会话锁定的所有表。因此锁定表2的调用是解锁表1。