我对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被标记为已锁定.为什么会这样?
谢谢
LOCK TABLES不是事务安全的,并且在尝试锁定表之前隐式提交任何活动事务.
因此,在第一种情况下,您有一个事务可以锁定2个表,而第二个只有一个,因为LOCK TABLES table1 WRITE已经提交了
| 归档时间: |
|
| 查看次数: |
8105 次 |
| 最近记录: |