Mein Code ist ein wenig durcheinander, ich bin mir nicht sicher, wo das Problem liegt, aber ich bekomme Deadlocks, ohne Transaktionen oder Tabellensperren zu verwenden. Jede Information darüber würde helfen.
Ich habe nach Deadlocks gesucht und es scheint, dass die einzige Möglichkeit, sie zu verursachen, darin besteht, Transaktionen zu verwenden.
%Vor%Bearbeiten: Warum downvotes? Es ist eine gültige Frage. Wenn es unmöglich ist, sag einfach warum, so dass andere Leute sehen können, wenn sie auf dieses Problem stoßen.
In InnoDB wird jede Anweisung in einer Transaktion ausgeführt; BEGIN
und autocommit = 0 werden für Transaktionen mit mehreren Kontoauszügen verwendet. Allerdings passiert der Deadlock zwischen verschiedenen Transaktionen.
Es scheint, dass Sie keinen Index für das Feld id
haben oder mehr als ein Datensatz die gleiche id
haben. Wenn nicht, dann haben Sie eine Index-Lücken-Verriegelung. Um weiter zu diagnostizieren, müssen Sie die Ausgabe von SHOW ENGINE InnoDB STATUS
Tags und Links mysql deadlock innodb transactions