Loading:

Promocja Helion.pl

Jak przebiega proces transakcji? opis i zastosowanie - MySQL

Przykład - koszyk zakupów w sklepie internetowym po złożeniu zamówienia

Jest to zwykle czas na wystawianie faktury (wpisy do tabeli np. faktura), która bazuje na zawartości koszyka (tabela koszyk_pozycje). Jeśli w momencie wpisu kolejnych zamówionych pozycji do tabeli faktura lub usuwania zawartości koszyka po złożeniu zamówienia (tabela koszyk_pozycje) wystąpi przerwanie komunikacji, przestanie działać system, itp. wówczas nastąpić mogą nieprzewidywalne przekłamania w zawartości wspomnianych tabel. Problem owych przekłamań rozwiązuje mechanizm transakcji, które możemy zapisać poniższym pseudo-kodem:

START_TRANSAKCJA;
   INSERT INTO faktura (...) VALUES (...);
   $faktura_id = mysql_inserted_id();
   foreach (koszyk_pozycje){
      INSERT INTO faktura_pozycje (...,faktura,..) VALUES (...,$faktura_id,... );
   }
   DELETE FROM koszyk_pozycje WHERE koszyk_id = ?
POTWIERDZ_TRANSAKCJA;


Transakcje rozpoczynają się poleceniem BEGIN (lub BEGIN WORK (lub, jak później zobaczymy, poleceniem START TRANSACTION)) i kończa słowem COMMIT.

Przykład

mysql> CREATE TABLE tab (f INT) TYPE=InnoDB;

Rozpocznijmy transackję, w której wstawimy nowy rekord do tablicy tab:

mysql> BEGIN;
Query OK, 0 rows affected (0.00 sec)

mysql> INSERT INTO tab(f) VALUES (1);
Query OK, 1 row affected (0.01 sec)

Zobaczmy, co znajduje się w tablicy tab

mysql> SELECT * FROM tab;
+---+
| f |
+---+
| 1 |
+---+
1 row in set (0.00 sec)

Nastepnie wykonajmy ROLLBACK

mysql> ROLLBACK;
Query OK, 0 rows affected (0.01 sec)

Zobaczmy jeszcze co znajduje się w tablicy tab

mysql> SELECT * FROM tab;
Empty set (0.00 sec)

Bez komendy COMMIT wstawienie nowego rekordu nie było permanentne i zostało cofnięte poleceniem ROLLBACK. Należy zauważyć, że nowy rekord byłby widoczny w tablicy w czasie wykonywania transakcji z poziomu tej samej sesji (z poziomu innej sesji nie był widoczny).

 

Źródło: http://gryf.mif.pg.gda.pl/~mate/wyklady/bazy/transakcje.html



Napisz Artykuł

Listing

niema


Ten wpis posiada swój wątek na forum

Wszystkie pytania prosimy kierować właśnie tam ponieważ komentarze to miejsce na poprawki do kodu lub alternatywne rozwiązania i pytania nie będą publikowane

http://forum.funkcje.net/forum/viewtopic.php?f=2&t=5564

Dane do logowania na forum są takie same jak na funkcje.net



Dodano przez: divix
Ranga: Administrator serwisu Punktów: 38323
Komentarze użytkowników
    • Treść komentarza
      Kod do komentarza (opcjonalnie)
      PHP JavaScript MySQL Smarty SQL HTML CSS ActionScript
      Autor
      Token
      token

       

       








funkcje.net
Wszelkie prawa zastrzeżone©. | Funkcje.net 2008-17 v.1.5 | design: diviXdesign & rainbowcolors