Verursacht dies eine Race-Bedingung mit MySQL (InnoDB):MySQL Race-Conditions
Starten Sie die Transaktion.
Versuchen Sie, aufzunehmen.
Wenn der Datensatz nicht existiert, kehren Sie zurück.
Wenn ein Datensatz existiert, löschen Sie ihn und fügen Sie einen Protokolleintrag hinzu, der besagt, dass er gelöscht wurde.
Ende Transaktion (Festschreibung/Rollback).
Ist es möglich, ein anderer Prozess kurz vor dem Löschschritt in 2b zu starten, um das Vorhandensein des Datensatzes erkennen und dann beide Prozesse eingeben Artikel Einträge in das Protokoll löschen?
Gibt es irgendwelche Vorsichtsmaßnahmen, die ich ergreifen muss?
Danke.
Sehen Sie dieses Verhalten? Oder ist das eine rein theoretische Frage? – Joe
Wenn Sie einen eindeutigen Index für die Protokolltabelle haben, kann der zweite Thread dort keinen doppelten Eintrag hinzufügen und der zweite Thread wird zurückgesetzt. Indizes zur Rettung noch einmal. –