Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Zabezpieczenie przed podwójnym pobraniem rekordu
dav
post
Post #1





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 20.08.2013

Ostrzeżenie: (0%)
-----


Chcę pobrać jeden losowy wiersz z tabeli. Robię to za pomocą 2 skryptów, odpalanych w tym samym czasie.
Jak zabezpieczyć się przed tym, aby rekord nie został pobrany przez oba te skrypty, ale tylko przez jeden ?
Wiem że mogę sobie odpowiednio oflagować rekord, ale jeśli drugi skrypt odpali się kilka milisekund później to jest możliwość że też zdąży go pobrać zanim ten pierwszy go oflaguje.
Czy transakcje rozwiążą problem, czy należy zastosować blokownie tabel?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Pyton_000
post
Post #2





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


A czy ten wiersz ma wracać z powrotem no póli dostępnych? Jak to jest?

Bo możesz robić np.
UPDATE flaga+1;
SELECT * ... WHERE Flaga = 1;

Minusem jest non stop update;

Ew. jeżeli baza stoi na InnoDB to transakcja na ww. zapytania tylko w odwrotnej kolejności czyli najpierw select, potem insert.
InnoDB ma blokadę wiersza, a w połączeniu z transakcją gwarantuje zabezpieczenie przed pobraniem go.
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 15.10.2025 - 00:52