Transakcja bazodanowa jest grupą instrukcji SQL, która
wykonuje logiczną jednostkę pracy.
Możemy ją sobie wyobrazić jako nierozłączny zbiór instrukcji SQL, których wyniki
powinny być zapisane w bazie danych w całości (lub zostać w całości wycofane).
Przykładem transakcji bazodanowych jest przelew
pieniędzy z konta bankowego na inne. Instrukcja UPDATE odejmuje daną sumę od ilości gotówki na jednym koncie, a
druga instrukcja UPDATE dodaje ją do
pieniędzy na drugim koncie. Zarówno odejmowanie, jaki i dodawanie muszą być
trwale zapisane w bazie danych. W przeciwnym razie pieniądze zostaną utracone.
Jeżeli wystąpi problem z przelewem, wówczas zarówno odejmowanie, jak i
dodawanie muszą zostać wycofane. W tym prostym przykładzie są wykorzystywane
jedynie dwie instrukcje UPDATE, transakcja
może jednak zawierać wiele instrukcji INSERT,
UPDATE i DELETE.
Zatwierdzenie i
wycofanie transakcji
Aby trwale zapisać wyniki instrukcji SQL znajdujących
się w transakcji, należy wykonać zatwierdzenie
za pomocą instrukcji COMMIT.
Jeżeli chcemy wycofać wycofać wyniki,
wykonujemy instrukcję ROLLBACK, która
przywraca pierwotne wartości wierszy.
W poniższym przykładzie do tabeli customer jest dodawany jeden wiersz, a następnie zmiana jest
utrwalana przez wykonanie instrukcji COMMIT:
W poniższym przykładzie do tabeli customer jest dodawany kolejny wiersz, a następnie zmiana jest wycofana
za pomocą instrukcji ROLLBACK:
To zapytanie pokazuje nowy wiersz zatwierdzony przez
instrukcję COMMIT:
Informacje o kliencie numer 1019 zostały utrwalone przez
instrukcję COMMIT, natomiast
informacje o kliencie numer 1020 zostały wycofane przez instrukcję ROLLBACK.
Rozpoczynanie i
kończenie transakcji
Transakcja jest logiczną jednostką pracy, która
umożliwia rozdzielenie instrukcji SQL. Posiada początek i koniec.
Transakcja rozpoczyna się, gdy ma miejsce jedno ze
zdarzeń:
- Połączenie z bazą danych i wykonanie instrukcji DML (INSERT, UPDATE lub DELETE).
- Wcześniejsza transakcja kończy się i wprowadzamy kolejną
instrukcję DML.
Transakcja kończy się, gdy:
- Zostaną wykonane instrukcje COMMIT lub ROLLBACK.
- Zostanie wykonana instrukcja DDL, taka jak CREATE TABLE - w takim przypadku
zatwierdzenie dokonywane jest automatycznie.
- Zostanie wykonana instrukcja DCL, taka jak GRANT - w takim przypadku zatwierdzenie
dokonywane jest automatycznie. Instrukcja GRANT
zostanie opisana w następnej lekcji.
- Nastąpi rozłączenie z bazą danych.
- Wykonanie instrukcja DML nie powiedzie się - w takim
przypadku instrukcja ROLLBACK jest
wykonywania jedynie dla tej konkretnej instrukcji DML.