2013-02-08 8 views
9

Mam małą ciekawość blokad stołów MySQL.Wielokrotne blokady stołów MySQL

Powiedz, że chcę zablokować dwa stoły. I wykonanie tego polecenia:

LOCK TABLES table1 WRITE, table2 WRITE 

I wtedy sprawdzić, czy tabele zostały rzeczywiście zablokowana przez wykonanie:

SHOW OPEN TABLES IN mydatabase WHERE In_use > 0 

Zauważyłem tho że jeśli uruchomię dwa blokada poleceń sequentitally na przykład:

LOCK TABLES table1 WRITE 
LOCK TABLES table2 WRITE 

A następnie sprawdź, które tabele są zablokowane za pomocą tego samego polecenia tylko tabela 2 jest oznaczona jako zablokowana. Dlaczego tak jest?

Dzięki

Odpowiedz

7

LOCK TABLES nie jest transakcja bezpieczna i pośrednio zobowiązuje każdą aktywną transakcję przed przystąpieniem do blokowania tabel.

Tak więc, w pierwszym przypadku, masz jedną transakcję, która pomieścić 2 tabele zablokowana, w drugim tylko jeden, bo LOCK TABLES table1 WRITE zostało popełnione

0

blokady tabel najpierw odblokować wszystkie tabele zablokowane przez bieżącej sesji przed wykonaniem podana blokada. Zatem wywołanie blokady tabeli 2 odblokowuje tabelę 1.