![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 1 190 Pomógł: 27 Dołączył: 23.04.2005 Ostrzeżenie: (0%) ![]() ![]() |
Wszyscy wiemy do czego służą transakcje. Zastanawiam się w jaki sposób kontrolujecie ich poprawność w swoich projektach.
Załóżmy, że dokonuję w bazie (za pomocą skryptu oczywiście) 2 delete, 4 inserty i 2 update'y. Albo wszystkie muszą zostać wykonane poprawnie albo nic nie jest zmieniane w bazie. Ja do tej pory robiłem tak, że: 1. startowałem transakce 2. ustawiałem $transakcja =0; 3. po każdym zapytaniu $transakcja++; 4. Jeśli $transakcja ==8 (wym przypadku) COMMIT else ROLBACK. Ale dzisiaj znalazłem pewien błąd. Aplikacja wystartowała aplikacje, 4 zapytania zostały wykonane a przy 5 był jakiś błąd. Skrypt wywalił "Nieudane zapytani..." i zatrzymał wykonywanie skryptu. Inny użytkownik wykonywał inną operacje, która też korzysta z transakcji, ta operacja została wykonana pomyślnie.. O dziwo pierwsza transakcja została zatwierdzona (szok bo tak nie powinno się stać). Czyli zamiast 2 deletów, 4 insertów i 2 updatów zostało wykonane 4 pierwsze po czym zatwierdzone. ucierpiała integralność danych. Mógłym stosować tai zapis (odnośnie punktu 2.) if (mysql_affected_rows() > 0) $transakcja++; ale jak pisze w manualu: Cytat mysql_affected_rows() zwraca ilość wierszy przetworzonych w ostatniej operacji INSERT, UPDATE lub DELETE (...) Notatka: Podczas operacji UPDATE, MySQL nie aktualizuje kolumn w których nowa wartość jest identyczna z poprzednią. Możliwe jest zatem, że zwrócona przez mysql_affected_rows() liczba nie będzie odpowiadać liczbie wierszy pasujących do zapytania, ale tych, które zostały faktycznie zmienione. Wystarczy, że updatujemy dane, które nie zostały zmienione i już lipa, transakcja nie zostanie zatwierdzona. Może macie jakieś sprawdzone sposoby kontroli transakcji? -------------------- ”Godzina nauki w życiu nowoczesnego apostoła jest godziną modlitwy.”
(św. Josemaría Escrivá, Droga, 335) |
|
|
![]() ![]() |
![]() |
Aktualny czas: 20.08.2025 - 07:10 |