
Strona o szybkim czytaniu.
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.
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.
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.
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.
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.
Transakcja rozpoczyna się w momencie wykonania dowolnej operacji DML.
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.
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 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.
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.