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

MySQL Deadlock z wkładką, która wyzwala wyzwalacz

Wątek 2 utrzymuje wspólną blokadę w wierszu w tabeli użytkowników.

Następnie wątek 1 próbuje uzyskać blokadę na wyłączność w tym samym wierszu i przechodzi w tryb oczekiwania na blokadę.

Ale wątek 1 nie będzie miał możliwości przekroczenia limitu czasu, ponieważ wątek 2 próbuje następnie eskalować swoją blokadę do wyłączności ... ale aby to zrobić, musi poczekać na wątek 1, który jest w oczekiwaniu na blokadę, ale czeka na wątek 2.

Każde z nich blokuje się nawzajem.

To impas.

Serwer wybiera transakcję do zabicia, aby niepotrzebnie się nie blokowały.

Wykrywanie zakleszczeń umożliwia natychmiastowy sukces jednego wątku kosztem drugiego. W przeciwnym razie oboje utknęliby w zamku, czekając, aż jeden z nich umrze z powodu zbyt długiego czekania.

Jesteś w trybie automatycznego zatwierdzania, ale oczywiście nie oznacza to, że nie uczestniczysz w transakcji. Każde zapytanie z InnoDB jest nadal obsługiwane w transakcji, ale z automatycznym zatwierdzaniem, transakcja jest niejawnie uruchamiana, gdy zapytanie zaczyna się wykonywać i niejawnie zatwierdzane, gdy się powiedzie.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak aplikacje na Androida mogą uzyskać dostęp do MySQL?

  2. Czy mogę automatycznie dostosować wartość pola z automatyczną inkrementacją w bazie danych?

  3. PostgreSQL a MySQL

  4. Mapowanie JPA:QuerySyntaxException:foobar nie jest mapowany...

  5. Jak wyszukiwać wiersze zawierające podciąg?