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

Atomare MySQL-Operationen und Tabellensperren

Sie sind Ihrem Design sehr nahe, aber noch nicht ganz am Ziel.

Zunächst einmal muss Ihr Veranstaltungstisch die Anzahl der noch verfügbaren Tickets für Ihre Veranstaltung enthalten (zusätzlich zu allem, was Sie sonst noch dort haben möchten).

Zweitens muss Ihre Hinterlegungstabelle eine DATETIME-Spalte haben, die angibt, wann die Hinterlegung abläuft. Sie müssen diesen Wert immer dann festlegen, wenn Tickets treuhänderisch hinterlegt werden.

Drittens muss die Transaktion zum Hinterlegen von Tickets

  1. Sperre die Ereigniszeile.
  2. Lesen Sie die Spalte verfügbare Tickets. (abbrechen, wenn nicht genug vorhanden)
  3. Fügen Sie eine Zeile in die Escrow-Tabelle ein
  4. Aktualisieren Sie die Veranstaltungszeile, um die Spalte „Verfügbare Tickets“ zu verringern.
  5. Entsperren Sie die Ereigniszeile.

Viertens muss die Aktion zum Abschließen des Verkaufs die Hinterlegungszeile löschen und eine Zeile für verkaufte Tickets einfügen. Das ist nicht schwer.

Fünftens benötigen Sie eine treuhänderische Bereinigungsoperation. Dies muss nach allen abgelaufenen Treuhandzeilen suchen (die ein Ablaufdatum in der Vergangenheit haben) und für jede Zeile:

  1. sperren Sie die entsprechende Ereigniszeile.
  2. lesen Sie die Anzahl der treuhänderisch hinterlegten Tickets aus der Treuhandtabelle
  3. Löschen Sie die Zeile der Escrow-Tabelle.
  4. Aktualisieren Sie die Veranstaltungszeile, um die Spalte „Verfügbare Tickets“ zu erhöhen.
  5. Entsperren Sie die Ereigniszeile.

Der Trick besteht darin, die Anzahl der verfügbaren zu haben Tickets werden so verwaltet, dass sie korrekt miteinander verzahnt sind, damit die Rennbedingungen zwischen Benutzern Ihr Event nicht übertreiben.