Transakcje

Transakcja jest to zbiór operacji wykonanych w ramach jednej sesji i posiadający pewne cechy. Transakcja jest elementarną jednostką interakcji procesu z bazą danych. Wszystkie operacje wykonywane na bazie danych są zorganizowane w postaci ciągu transakcji.

Cechy transakcji

Niepodzielność

Cecha ta zapewnia, że wszystkie instrukcje wchodzące w skład transakcji muszą zostać wykonane w całości, lub żadna ze składowych transakcji nie może zostać wykonana.

Spójność

Każda transakcja, która zostaje przeprowadzona, przekształca bazę danych ze stanu spójnego w stan spójny, a więc zgodny z pewnymi założeniami nałożonymi na modelowany przez bazę danych obraz. W trakcie wykonywania się transakcji spójność modelowanego obrazu może ulec naruszeniu.

Izolacja

W trakcie wykonywania się instrukcji wchodzących w skład transakcji zmiany dokonywane na danych nie są widoczne dla innych użytkowników do momentu zakończenia transakcji.

Trwałość

Każda transakcja może zostać wycofana – wszystkie wprowadzone przez nią zmiany zostają odwrócone do postaci pierwotnej, lub zatwierdzona – wprowadzone zmiany zostają zapisane w sposób trwały. Transakcja może zostać wycofana poleceniem ROLLBACK, lub zatwierdzona poleceniem COMMIT. Każde użycie komendy DDL powoduje niejawne zakończenie transakcji poprzez jej zatwierdzenie.

Zarządzanie transakcjami

Transakcja rozpoczyna się w momencie wykonania dowolnej operacji DML.

Instrukcja COMMIT

Transakcja kończy się w momencie wykonania instrukcji COMMIT. Powoduje ona, że wszystkie modyfikacje wykonane w transakcji zostają zatwierdzone. Transakcja kończy się też niejawnie w przypadku wykonania jakiejkolwiek komendy DDL. Skutek zakończenia transakcji w taki sposób jest identyczny jak w przypadku wydania komendy COMMIT.

Instrukcja ROLLBACK

Wykonanie instrukcji ROLLBACK również powoduje zakończenie transakcji, ale wszystkie modyfikacje danych wykonane w tej transakcji zostają wycofane. Transakcja kończy się podobnym efektem, gdy nastąpi awaryjne przerwanie sesji.

Instrukcja SAVEPOINT

Instrukcja ta pozwala zakładać punkty zachowania w trakcie wykonywania się transakcji. Jeżeli w czasie transakcji zostaną takie punkty założone, to możliwe będzie wycofanie transakcji nie tylko w całości, ale można będzie wycofać transakcję częściowo do jednego z punktów zapamiętania.

Przykład


INSERT INTO grupy_cen VALUES (20, 100000, 200000);
SAVEPOINT s1;
INSERT INTO grupy_cen VALUES (25, 200000, 500000);
ROLLBACK TO s1;
INSERT INTO grupy_cen VALUES (30, 200000, 500000);
COMMIT;
                        

W powyższym przykładzie do tabeli zostaną włożone tylko rekordy dotyczące rabatu 20% i rabatu 30%, Rekord z rabatem 25% został wycofany.