Wie vermeide ich Deadlocks in MySQL?

Ich habe folgende Abfrage (alle Tabellen sind innoDB)

INSERT INTO busy_machines(machine) 
               SELECT machine FROM all_machines 
               WHERE machine NOT IN (SELECT machine FROM busy_machines) 
               and machine_name!='Main' 
               LIMIT 1

Was führt zu einem Deadlock, wenn ich es in Threads ausführe, offensichtlich wegen der inneren Auswahl, oder?

Der Fehler, den ich erhalte, ist:

(1213, 'Deadlock found when trying to get lock; try restarting transaction')

Wie kann ich den Deadlock vermeiden? Gibt es eine Möglichkeit, die Abfrage zu ändern, damit sie funktioniert, oder muss ich etwas anderes tun?

Der Fehler tritt natürlich nicht immer auf, nachdem diese Abfrage viele Male und in mehreren Threads ausgeführt wurde.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage