Wpis z mikrobloga

Pod warunek wyścigu robicie osobne testy integracji dla różnych baz?
W nowej firmie przypadkowo przełączając QR skaner w ciągły tryb a nie pojedynczy, dostałem 2x rabat a nie 1x.
Przyglądając się kodu końcowego punktu http odkryłem coś takiego:
if not exists (select true from kody where qr=param1 and (tutaj dynamiczny warunek) for update)
insert into kody(param1, NOW())
dynamiczny warunek, bo rabat w jednym dniu zależy od pory dnia a w drugim np. od limitu zrabatownych kodów w ciągu ostatniej godziny.

Co ciekawe w najnowszym mysql ta blokada działa.
#programowanie #sql #mysql
  • 1
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@100x: sam SELECT FOR UPDATE bez START TRANSACTION bedzie sie tak zachowywal. I tak, testuje sie to, ale nie robiac to z mysla o konkretnej bazie, tylko czy logika sie zgadza (tutaj: upewnij sie ze rabat nie byl przyznany zanim go przyznasz => test czy 2+ operacje na raz zwieksza wartosc wiecej niz jednokrotnie)
  • Odpowiedz