sql >> Databáze >  >> RDS >> Mysql

MySQL atomické operace a zamykání tabulek

Máte velmi blízko ke svému designu, ale ne tak docela.

Za prvé, váš stůl na události musí obsahovat počet vstupenek, které jsou na vaši událost stále k dispozici (kromě čehokoli jiného, ​​co tam chcete).

Za druhé, vaše tabulka úschovy u třetí osoby musí obsahovat sloupec DATETIME, který uvádí, kdy vyprší platnost úschovy u třetí osoby. Tuto hodnotu musíte nastavit vždy, když budou vstupenky do úschovy.

Za třetí, transakce vkládání lístků do úschovy musí

  1. zamkněte řádek události.
  2. přečtěte si sloupec dostupných vstupenek. (zrušit, pokud jich není dostatek)
  3. vložit řádek do tabulky úschovy u třetí osoby
  4. aktualizujte řádek události, abyste snížili počet dostupných vstupenek.
  5. odemkněte řádek události.

Za čtvrté, při dokončení prodeje je třeba odstranit řádek úschovy u třetí osoby a vložit řádek s prodaným lístkem. To není těžké.

Za páté, potřebujete operaci úschovy u třetí osoby. Je třeba vyhledat všechny řádky úschovy u třetí osoby, jejichž platnost vypršela (které mají datum vypršení platnosti v minulosti) a pro každý z nich:

  1. uzamkněte odpovídající řádek události.
  2. přečtěte si počet tiketů uložených v úschově z tabulky úschovy
  3. smažte řádek v tabulce úschovy u třetí osoby.
  4. aktualizujte řádek události, aby se zvýšil sloupec dostupných vstupenek.
  5. odemkněte řádek události.

Trik je mít počet dostupných vstupenky udržované způsobem, který je správně propojen, takže podmínky závodu mezi uživateli vaši událost nepřeprodávají.




  1. Duplicitní záznam pro primární klíč na MySQL

  2. SQL Server:zaujalo GETDATE()

  3. JPA SET IDENTITY_INSERT nefunguje

  4. SQL index DROP, tabulka DROP a příkazy databáze DROP vysvětlené s příklady