MySQL多表锁

Gab*_*eri 9 mysql

我对MySQL表锁有一点小小的好奇心.

说我想要锁定两个表.我执行这个命令:

LOCK TABLES table1 WRITE, table2 WRITE
Run Code Online (Sandbox Code Playgroud)

然后我检查表是否确实已通过执行锁定:

SHOW OPEN TABLES IN mydatabase WHERE In_use > 0
Run Code Online (Sandbox Code Playgroud)

我注意到如果我执行两个锁定命令,例如:

LOCK TABLES table1 WRITE
LOCK TABLES table2 WRITE
Run Code Online (Sandbox Code Playgroud)

然后使用相同的命令检查哪些表被锁定table2被标记为已锁定.为什么会这样?

谢谢

rav*_*nur 8

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

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