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%.
- 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 transakcjiDopóki transakcja nie zostanie zamknięta, dostęp do tabeli gry_wideo będzie zablokowany.
Autor tekstu: Filip Kmiecik