Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Wyłączna blokada MySQL

Tak, blokujesz wszystkie wiersze w tabeli, gdy masz warunek na niezindeksowanej kolumnie, taki jak user_id .

Blokady dotyczą wszystkich „zbadanych” rzędów. Twój stan WHERE user_id = <user_id> musi zbadać wszystkie wiersze w tabeli i przetestuj je jeden po drugim, aby sprawdzić, czy pasują do wartości <user_id> .

Oba zapytania sprawdzają cały zestaw wierszy, mimo że szukają różnych określonych wartości <user_id> , więc są sprzeczne.

Gdybyś miał indeks na user_id kolumna, wtedy MySQL użyje tego indeksu, aby najpierw znaleźć pasujące wiersze, a następnie tylko pasujące wiersze zostaną zbadane, a zatem zostaną zablokowane.

Nie ma to nic wspólnego z poziomem izolacji transakcji. Tego typu blokady występują na wszystkich poziomach izolacji transakcji.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL Wybierz tylko wiersze z wartością minimalną w kolumnie z warunkiem WHERE

  2. MySQL do MS Access

  3. Jak wyświetlić unikalne ograniczenia tabeli w MySQL?

  4. Jak wybrać ograniczoną liczbę wierszy dla każdego klucza obcego?

  5. jakie jest zawiadomienie:id zasobu#9?