sql >> Database >  >> RDS >> Mysql

MySQL Deadlock met een insert die een trigger opheft

Thread 2 bevat een gedeeld slot op de rij in de gebruikerstabel.

Dan probeert thread 1 een exclusieve lock op dezelfde rij te krijgen, en gaat in lock wait.

Maar thread 1 heeft geen kans om een ​​time-out te krijgen, omdat thread 2 dan zijn slot probeert te escaleren naar exclusief... draad 2.

Ze blokkeren elkaar.

Dat is een impasse.

De server selecteert een transactie om te doden, zodat ze elkaar niet onnodig blokkeren.

Met deadlock-detectie kan de ene thread onmiddellijk slagen ten koste van de andere. Anders zouden ze allebei vast komen te zitten, wacht tot een van hen stierf door te lang wachten.

U bevindt zich in de autocommit-modus, maar dat betekent natuurlijk niet dat u zich niet in een transactie bevindt. Elke query met InnoDB wordt nog steeds verwerkt in een transactie, maar met autocommit wordt de transactie impliciet gestart wanneer de query wordt uitgevoerd en impliciet vastgelegd wanneer deze slaagt.



  1. Fatale fout:oproep naar niet-gedefinieerde functie sqlsrv_connect()

  2. Hoe Div() werkt in PostgreSQL

  3. MySQL kapt aaneengeschakeld resultaat van een GROUP_CONCAT-functie af

  4. Hoe correct om te gaan met datums in querybeperkingen