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

Operazioni atomiche MySQL e blocco delle tabelle

Sei molto vicino al tuo design, ma non del tutto.

Prima di tutto, il tuo tavolo evento deve contenere il numero di biglietti ancora disponibili per il tuo evento (oltre a qualsiasi altra cosa tu voglia lì).

In secondo luogo, la tua tabella di deposito a garanzia deve avere una colonna DATETIME che indichi quando scade il deposito a garanzia. Devi impostare quel valore ogni volta che i biglietti vanno in deposito a garanzia.

In terzo luogo, la transazione di deposito di biglietti in deposito a garanzia deve

  1. Blocca la riga dell'evento.
  2. leggi la colonna dei biglietti disponibili. (interrompi se non sono disponibili abbastanza)
  3. inserisci una riga nella tabella escrow
  4. aggiorna la riga dell'evento per diminuire la colonna dei biglietti disponibili.
  5. sblocca la riga dell'evento.

In quarto luogo, l'azione di completamento della vendita deve eliminare la riga di deposito a garanzia e inserire una riga di biglietto venduto. Questo non è difficile.

In quinto luogo, è necessaria un'operazione di pulizia dell'escrow. Questo deve cercare tutte le righe di deposito a garanzia che sono scadute (che hanno una data di scadenza nel passato) e, per ognuna:

  1. Blocca la riga dell'evento corrispondente.
  2. leggi il numero di biglietti depositati in garanzia dal tavolo escrow
  3. elimina la riga della tabella di deposito a garanzia.
  4. aggiorna la riga dell'evento per aumentare la colonna dei biglietti disponibili.
  5. sblocca la riga dell'evento.

Il trucco è avere il numero di disponibili i biglietti vengono mantenuti in modo da essere interbloccati correttamente, in modo che le condizioni di gara tra gli utenti non svendano eccessivamente il tuo evento.