sql >> Database >  >> RDS >> Mysql

MySQL-atomaire bewerkingen en tabelvergrendeling

Je bent heel dicht bij je ontwerp, maar nog niet helemaal.

Allereerst moet je evenemententafel het aantal tickets bevatten dat nog beschikbaar is voor je evenement (naast alles wat je daar nog meer wilt hebben).

Ten tweede moet uw escrow-tabel een DATETIME-kolom hebben die aangeeft wanneer de escrow verloopt. Je moet die waarde instellen wanneer tickets in escrow gaan.

Ten derde moet de transactie om tickets in escrow te plaatsen

  1. vergrendel de gebeurtenisrij.
  2. lees de kolom met beschikbare tickets. (afbreken als er niet genoeg beschikbaar zijn)
  3. voeg een rij in de escrow-tabel in
  4. werk de evenementrij bij om de kolom met beschikbare tickets te verlagen.
  5. ontgrendel de gebeurtenisrij.

Ten vierde moet de actie om de verkoop te voltooien de escrow-rij verwijderen en een rij met verkochte tickets invoegen. Dit is niet moeilijk.

Ten vijfde heeft u een escrow-opruimingsoperatie nodig. Dit moet zoeken naar alle escrow-rijen die zijn verlopen (die een vervaldatum in het verleden hebben) en, voor elke:

  1. vergrendel de bijbehorende gebeurtenisrij.
  2. lees het aantal escrow-tickets van de escrow-tabel
  3. verwijder de escrow-tabelrij.
  4. werk de evenementrij bij om de kolom met beschikbare tickets te verhogen.
  5. ontgrendel de gebeurtenisrij.

De truc is om het aantal beschikbare . te hebben tickets worden onderhouden op een manier die correct is vergrendeld, zodat raceomstandigheden tussen gebruikers uw evenement niet overdrijven.




  1. Pas op waar u op let

  2. Niet-gespecificeerde runtime-fout tijdens het uitvoeren van vba-script

  3. Leer hoe u de prestaties van Microsoft SQL Server kunt afstemmen

  4. Voeg automatisch letters toe voor een veld voor automatisch ophogen