Język SQL: transakcje

article-thumbnail

Cechy transakcji

Transakcją nazywamy zestaw wykonywanych operacji, które stanowią całość. Transakcja będzie pomyślnie zakończona, jeżeli zostaną wykonane wszystkie operacje w transakcji lub żadna z nich nie zostanie wykonana. Każda transakcja dzieli się na trzy etapy:

  • rozpoczęcie,
  • wykonanie,
  • zakończenie.

Każda transakcja spełnia reguły ACID:

  • atomic – niepodzielna,
  • consistent – nie wpływa na integralność bazy,
  • isolated – jest odizolowana, aby nie powodować konfliktów z innymi równocześnie wykonywanymi transakcjami,
  • durable – działania wykonane w transakcji są trwałe.

COMMIT zatwierdza wykonanie transakcji, natomiast ROLLBACK skutkuje powrotem do stanu sprzed wykonania transakcji.

Za pomocą funkcji @@TRANCOUNT sprawdzamy liczbę otwartych transakcji w danym momencie.

SELECT @@TRANCOUNT;

Punkty przywracania stosujemy, aby wycofać część transakcji. Tworzy się je przy pomocy instrukcji SAVE TRANSACTION;

START TRANSACTION;
INSERT INTO gry_wideo(nazwa, platforma, cena)
VALUES(‘Romb_Taider’,‘PC’,220);
SAVE TRANSACTION punkt_1;
INSERT INTO gry_wideo(nazwa, platforma, cena)
VALUES(‘Estiny’,‘PS3’,70);
ROLLBACK TRANSACTION punkt_1;

W powyższym przykładzie zostaną dodane dwa nowe wiersze, jednakże na koniec transakcja cofnie się do punktu przywracania, przez co jedynie dane gry Romb_Taider zostaną zapisane w tabeli.

Sposoby wykonywania transakcji

Istnieją trzy sposoby wykonywania transakcji w bazach danych:

  • explicit – transakcja jest rozpoczynana za pomocą polecenia START TRANSACTION, a zamykana za pomocą COMMIT lub ROLLBACK, np:

    START TRANSACTION
    UPDATE gry_wideo
    SET cena = cena*2
    WHERE platforma=’XONE’
    COMMIT;
    

    Powyższa transakcja zwiększy cenę wszystkich gier na platformę XONE o 100%.


    Dane w tabeli przed transakcją


    Dane w tabeli po wykonanej transakcji

  • autocommit – każda operacja wykonywana na serwerze jest traktowana jako transakcja, w związku z czym nie ma potrzeby ich rozpoczynania,
  • implicit – programy użytkowe w bazie wywołują transakcje – najpierw uruchamia się niejawny tryb transakcji za pomocą SET_IMPLICIT_TRANSACTIONS ON, a zamyka za pomocą SET_IMPLICIT_TRANSACTIONS OFF oraz COMMIT lub ROLLBACK, np:
    SET_IMPLICIT_TRANSACTIONS ON;
    UPDATE gry_wideo
    SET cena = cena*2
    WHERE platforma=’XONE’
    COMMIT;
    SET_IMPLICIT_TRANSACTIONS OFF;
    

    Powyższa transakcja zwiększy cenę wszystkich gier na platformę XONE o 100%.


    Dane w tabeli przed transakcją


    Dane w tabeli po wykonanej transakcji

    Dopóki transakcja nie zostanie zamknięta, dostęp do tabeli gry_wideo będzie zablokowany.

Autor tekstu: Filip Kmiecik