Loading:


    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




    Dodano przez: divix
    Ranga: Administrator serwisu Punktów: 0
    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-2025 v.1.5 | design: diviXdesign & rainbowcolors