@RRybak: Ok, a więc jakie są zalety READ COMMITED przy dodawaniu produktów do koszyka i przy składaniu zamówienia? Bo właśnie zauważyłem deadlocki przy najwyższym poziomie :)
tl;dr "Każde zapytanie wykonane przez transakcję widzi wszystkie te dane, które zostały zatwierdzone przed rozpoczęciem tego zapytania (a nie transakcji)" - nie dojdzie do sytuacji, że klient zamówi coś, co już nie jest dostępne.
@jaskowice1: jeśli zastosujesz niższe levele, to wszystkie zmiany będą wpływały na przebieg bieżącego koszyka/zamówienia - nawet jeśli inny klient będzie dodawał i się rozmyślał. Potrzebujesz czegoś, co utrzyma Ci w ryzach "to co jest dostępne" / "to co jest sprzedane". Ten poziom zapewni Ci tylko RC albo S. S ma ten problem, że w zależności od budowy tabel może Ci blokować całkiem spore zakresy wierszy, czasami nawet tabel, a to oznacza,
@Nartenlener: @RRybak: Czyli najlepiej na samym początku przed wykonaniem select'a (z koszyka) zrobić START TRANSACTION?
Muszę jeszcze dorobić savepoint'y i rollback - tylko za bardzo nie wiem jak to mogę dorobić tutaj do tego dodawania produktów do koszyka, lub do tworzenia nowego zamówienia - dalibyście może jakąś wskazówkę?
@jaskowice1: Nie za bardzo rozumiem, co chcesz zrobić :)
Nic nie stoi na przeszkodzie, aby o 10 produktów "biło" się 100 użytkowników. To, które zamówienie zostanie spełnione zależy od tego kto pierwszy zamówi. Tzn pierwszy klikający "kupuj" nijako blokuje rekord z towarem i jeśli jego transakcja nie zostanie zakończone kolejni użytkownicy dostaną deadlocka. Sama baza danych zadba o to, aby nie "sprzedać" towaru w nadmiarze.
@jaskowice1: Tak jak mówiłem, transakcyjnością zajmował się za mnie zawsze silnik DB, więc nigdy nie musiałem "z palca" jej tworzyć. Zapytaj może jeszcze raz mirków, może coś doradzą.
1. Nie żyje 17 latek 2. Znaleziony związany we Wrocławiu 3. Kogo jest dużo we Wrocławiu? ( ͡°( ͡°͜ʖ( ͡°͜ʖ͡°)ʖ͡°) ͡°) 4. Może być niedługo ciekawie ( ͡°͜ʖ͡°)
#bazydanych #sql #mysql
tl;dr "Każde zapytanie wykonane przez transakcję widzi wszystkie te dane, które zostały zatwierdzone przed rozpoczęciem tego zapytania (a nie transakcji)" - nie dojdzie do sytuacji, że klient zamówi coś, co już nie jest dostępne.
Muszę jeszcze dorobić savepoint'y i rollback - tylko za bardzo nie wiem jak to mogę dorobić tutaj do tego dodawania produktów do koszyka, lub do tworzenia nowego zamówienia - dalibyście może jakąś wskazówkę?
Nic nie stoi na przeszkodzie, aby o 10 produktów "biło" się 100 użytkowników. To, które zamówienie zostanie spełnione zależy od tego kto pierwszy zamówi. Tzn pierwszy klikający "kupuj" nijako blokuje rekord z towarem i jeśli jego transakcja nie zostanie zakończone kolejni użytkownicy dostaną deadlocka. Sama baza danych zadba o to, aby nie "sprzedać" towaru w nadmiarze.
Jeśli natomiast nie chcesz, aby nie
http://wklej.org/id/2964124/
Że muszę dodać rollbacki i savepointy w przypadku jakichś errorów... Co byś tutaj poradził?