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

Blokowanie MySQL w błędzie zduplikowanego klucza

Myślę, że upraszczasz terminologię/proces. Po przeanalizowaniu zapytania, a przed jego wykonaniem, musi ono nabyć niezbędne blokady. W tym momencie stwierdza się, że:

  • sesja 1 otrzymuje blokadę na wyłączność, ponieważ jest wkładana i nie ma innych blokad
  • sesje 2 i 3 są umieszczane w kolejce dla blokady współdzielonej, ponieważ blokada na wyłączność jest już utrzymywana przez sesję 1, a sesje 2 i 3 mają błąd zduplikowanego klucza

Jak powyżej, sesje 2 i 3 są umieszczane w kolejce dla blokad współdzielonych, ponieważ występują w nich błąd zduplikowanego klucza. Jednak gdy sesja 1 usunie klucz i zwolni blokadę na wyłączność, teraz zarówno sesja 2, jak i 3 otrzymują przyznane blokady współdzielone. W tym momencie obaj starają się zdobyć ekskluzywny zamek do uzupełnienia wkładki. Żaden jednak nie może, ponieważ drugi już trzyma wspólną blokadę. Tak więc wyłączna blokada nie jest przyznana żadnemu z nich i utkną w martwym punkcie.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sprawdź, czy nazwa użytkownika istnieje przy użyciu PHP PDO

  2. Pobierz identyfikator każdej instrukcji INSERT w wielu zapytaniach

  3. SQL Jak zsumować z innej tabeli i wstawić do innej tabeli

  4. Wybór wiersza z max w kolumnie - MySQL

  5. JEŚLI warunek Wykonaj zapytanie, w przeciwnym razie wykonaj inne zapytanie