2013-02-08 31 views
9

我對MySQL表鎖有一種好奇心。MySQL多表鎖

說我想鎖定兩個表。我執行以下命令:

LOCK TABLES table1 WRITE, table2 WRITE 

然後我檢查是否表確實已鎖定通過執行:

SHOW OPEN TABLES IN mydatabase WHERE In_use > 0 

我注意到壽,如果我運行兩個鎖例如sequentitally命令:

LOCK TABLES table1 WRITE 
LOCK TABLES table2 WRITE 

然後使用相同的命令檢查哪些表被鎖定只有table2被標記爲鎖定。這是爲什麼?

感謝

回答

7

LOCK TABLES不是交易安全,並試圖鎖定表之前隱含提交任何活動的事務。

因此,在第一種情況下,你有一個事務持有2個表鎖定,在第二隻有一個,因爲LOCK TABLES table1 WRITE已經COMMITED

0

鎖定表執行之前會先解除當前會話鎖定所有表指定的鎖。因此,鎖定表2的呼叫是解鎖表1.