MySQL多表锁

11

我对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个回答

10

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

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


0

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接