Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Mysql] transakcja
Forum PHP.pl > Forum > Bazy danych > MySQL
cornholio666
Witam,

Jak w temacie czy jest sens robić transakcje w takim przypadku

  1. $query = SELECT id FROM tab1 ....
  2.  
  3. $id = pobrane id z powyższego selecta
  4.  
  5. $query = INSERT INTO tab1 VALUES (wart1, wart2, $id )
  6.  
  7. .
  8. .
  9. .


Czy warto objąć calość transkacja ?
nospor
a niby co ta tranzakcja mialaby robic? Nic.
Ze niby jak sie insert nie powiedzie to ty selecta anulujesz? Tranzkacja ma sens gdy masz kilka nastepujacych zmian na bazie i gdy ktoras sie nie powiedzie to chcesz anulowac wczesniejsze.
wipo
Przyznaje racje nosporowi
Na marginesie lepszym rozwiązaniem byłoby zastosowanie pola auto_increment, które rozwiązałoby problem Twoich transakcji (przy poprawnym wpisie dostawniesz ID lub się nic nie wpisze i problem z głowy)
cornholio666
@nospor - ok zrozumiałem winksmiley.jpg

@wipo - tab1 jest tylko do odczytu bez mozliwosci zapisu
wipo
Nie chcę być złośliwy ale w przykładzie podałeś INSERT...........
Pozatym transakcje służą między innymi do cofnięcia operacji typu UPDATE, INSERT itp a nie SELECT * FROM cośtam
za017
Transakcje służą przede wszystkim zapewnieniu spójności bazy danych, do której może uzyskiwać dostęp wielu użytkowników. Jeśli Twój skrypt ma działać na serwerze i będzie go wywoływać wiele osób, musisz użyć transakcji. Transakcja gwarantuje:

1. NIEPODZIELNOŚCI operacji przeprowadzonej na bazie danych: albo operacja zostanie wykonana w całości, ale wcale
2. WYŁĄCZNOŚĆ dostępu do tabel: jeśli Twój skrypt odwołuje się do jakiejś tabeli, każdy inny skrypt (lub ten sam skrypt wywołany w tym samym czasie przez innego klienta) będzie musiał poczekać na zakończenie transakcji (jej zatwierdzenie albo anulowanie) zanim będzie mógł uzyskać dostęp do bazy danych.

Wyobraź sobie taką sytuację: dwie różne osoby odczytują z pewnej tabeli ilość dostępnych w sprzedaży przedmiotów i jednocześnie składają zamówienie na ostatnią sztukę: która z nich kupi ten przedmiot ? Transakcja uniemożliwia wystąpienie takiej sytuacji, przedmiot kupi ta osoba, która pierwsza uzyska (za pośrednictwem skryptu) dostęp do bazy danych.

W takiej sytuacji użycie transakcji jest jak najbardziej wskazane, nawet przy korzystaniu jedynie z select. gdyż pobrana z bazy danych zawartość może decydować o dalszym przebiegu wykonania skryptu, który może potem te dane modyfikować.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.