Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Warum blockieren zwei gleichzeitige delete + insert-Anweisungen eine leere Tabelle?

Die "Lücke" wird in Erwartung geschlossen, dass jemand versuchen könnte, die Zeile einzufügen, die ich zu löschen versuche.

Oder, um es anders zu sehen... Es wäre zu langsam, um jeden seltsamen Fall perfekt zu handhaben. Daher entscheidet sich InnoDB dafür, die meisten Fälle effizient zu behandeln und auf die seltenen Sonderfälle zu setzen.

Fazit:Lebe damit. Sie werden Sackgassen bekommen. Du wirst sie nicht unbedingt verstehen können. Aber Ihr Code muss wiederhergestellt werden – indem Sie einfach einen Rollback durchführen und zum BEGIN zurückkehren .