Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Operacje atomowe MySQL i blokowanie tabel

Jesteś bardzo blisko swojego projektu, ale nie do końca.

Po pierwsze, Twój stół na wydarzenie musi zawierać liczbę nadal dostępnych biletów na wydarzenie (oprócz tego, co tam chcesz).

Po drugie, Twoja tabela escrow musi mieć kolumnę DATETIME wskazującą, kiedy escrow wygasa. Musisz ustawić tę wartość za każdym razem, gdy bilety trafiają do depozytu.

Po trzecie, transakcja umieszczania biletów w escrow musi

  1. zablokuj wiersz wydarzeń.
  2. przeczytaj kolumnę dostępnych biletów. (przerwij, jeśli nie ma wystarczającej ilości)
  3. wstaw wiersz do tabeli depozytowej
  4. zaktualizuj wiersz wydarzeń, aby zmniejszyć kolumnę dostępnych biletów.
  5. odblokuj wiersz wydarzeń.

Po czwarte, czynność sfinalizowania sprzedaży wymaga usunięcia wiersza escrow i wstawienia wiersza sprzedanego biletu. To nie jest trudne.

Po piąte, potrzebujesz operacji czyszczenia depozytu. Wymaga to wyszukania wszystkich wierszy escrow, które wygasły (które mają datę wygaśnięcia w przeszłości) i dla każdego z nich:

  1. zablokuj odpowiedni wiersz zdarzeń.
  2. odczytaj liczbę zdeponowanych biletów z tabeli depozytowej
  3. usuń wiersz tabeli depozytowej.
  4. zaktualizuj wiersz wydarzeń, aby zwiększyć kolumnę dostępnych biletów.
  5. odblokuj wiersz wydarzeń.

Sztuką jest mieć liczbę dostępnych bilety utrzymywane w sposób, który jest prawidłowo powiązany, więc warunki wyścigu między użytkownikami nie przesadzają z Twoim wydarzeniem.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Błąd Entity Framework Core:Wystąpił błąd podczas korzystania z połączenia z bazą danych „na serwerze „localhost”

  2. Co oznacza klauzula SQL GROUP BY 1?

  3. Kolejność MySQL według pól i rodziców

  4. ServiceStack:testowanie OrmLite, zainstalowanego z NuGet, ale pojawia się błąd FileNotFoundException

  5. Dopasowanie wszystkich wartości w klauzuli IN