![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 76 Pomógł: 0 Dołączył: 8.01.2009 Ostrzeżenie: (0%) ![]() ![]() |
Witam mam pytanie odnośnie modyfikacji rekordów w mysql za pomocą PHP.
Jeśli robię skrypt, który modyfikuje powiedzmy opis jakiegoś produktu w tabeli i nadaję prawo do modyfikacji kilku użytkownikom, co się dzieje jeśli dwie lub więcej osób będą chciały zmodyfikować dokładnie ten sam rekord w dokładnie tym samym czasie? Czy istnieje funkcja w PHP, która pozwala zablokować modyfikowany rekord? Jak obejść taką sytuacje? |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 21 Pomógł: 1 Dołączył: 27.01.2009 Ostrzeżenie: (0%) ![]() ![]() |
Ramadisu - mylisz sie. Instrukcja UPDATE w MySQL jest operacja atomowa - do czasu jej zakonczenia blokowana jest tabela (jezeli silnik MyISAM) lub korygowany wiersz (silnik InnoDB). A zatem operacje Update wykonaja sie sekwencyjnie - jedna po drugiej, w porzadku zapisanym w kolejce zapytan (czas nadejscia). Blokada odbywa sie automatycznie Dodatkowo blokade mozna wymusic za pomoca LOCK i UNLOCK TABLE Cóż, to akurat jest oczywiste że zapytania pójdą wg. kolejki, wydaje mi się jednak że grzehotnikowi chodzi o sytuację kiedy np. dwóch administratorów otwiera w panelu opcję 'edytuj użytkownika' i edytuje tego samego użytkownika. Najpierw otwiera pierwszy, po chwili drugi - oboje mają te same dane w przykładowym formie uzupełnianym danymi z query. Następnie jeden z nich kilka wyślij i uznaje że rekord został zapisany tak jak on tego chciał - rzeczywiście tak jest. Natomiast drugi administrator nie mając pojęcia że ktoś aktualnie pracuje na tej części danych kilka sekund/minut później nadpisuje jego pracę, nawet jeżeli ten pierwszy powiedzmy zmieniał maila użytkownika, a drugi jego podpis (obrazowo przedstawione). |
|
|
![]() ![]() |
![]() |
Aktualny czas: 14.10.2025 - 00:45 |