sql >> Database teknologi >  >> RDS >> Mysql

MySQL atomoperationer og bordlåsning

Du er meget tæt på dit design, men ikke helt der.

Først og fremmest skal dit eventbord indeholde det antal billetter, der stadig er tilgængelige til dit arrangement (ud over hvad du ellers ønsker der).

For det andet skal din escrow-tabel have en DATETIME-kolonne, der angiver, hvornår deponeringen udløber. Du skal indstille denne værdi, hver gang billetterne bliver deponeret.

For det tredje skal transaktionen med at lægge billetter i escrow

  1. lås begivenhedsrækken.
  2. læs kolonnen med tilgængelige billetter. (afbryd, hvis der ikke er nok tilgængelige)
  3. indsæt en række i deponeringstabellen
  4. opdater begivenhedsrækken for at formindske kolonnen med tilgængelige billetter.
  5. lås begivenhedsrækken op.

For det fjerde skal handlingen med at fuldføre salget slette deponeringsrækken og indsætte en solgt billetrække. Det her er ikke svært.

For det femte har du brug for en deponeringsoperation. Dette skal lede efter alle deponeringsrækker, der er udløbet (som har en udløbsdato i fortiden) og for hver enkelt:

  1. lås den tilsvarende hændelsesrække.
  2. læs antallet af spærrede billetter fra spærringstabellen
  3. slet rækken af ​​spærret tabel.
  4. opdater begivenhedsrækken for at øge kolonnen med tilgængelige billetter.
  5. lås begivenhedsrækken op.

Tricket er at have antallet af tilgængelige billetter vedligeholdes på en måde, der er låst korrekt, så løbsforhold mellem brugere ikke oversælger dit arrangement.




  1. Postgresql - opdag ændringer og ring til webservice

  2. FEJL 1452:Kan ikke tilføje eller opdatere en underordnet række:en fremmednøglebegrænsning mislykkes

  3. Bedste måde at arkivere live MySQL-database

  4. Mysql 'VALUES function' er forældet