MySQL多表锁

时间:2013-02-08 12:37:26

标签: mysql

我对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被标记为已锁定。为什么会这样?

由于

2 个答案:

答案 0 :(得分:8)

LOCK TABLES不是事务安全的,并且在尝试锁定表之前隐式提交任何活动事务。

因此,在第一种情况下,您有一个事务可以锁定2个表,而第二个只有一个,因为LOCK TABLES table1 WRITE已被提交

答案 1 :(得分:0)

在执行指定的锁之前,锁定表将首先解锁当前会话锁定的所有表。因此锁定表2的调用是解锁表1。