{{:bazy_danych:6.4.pdf|:wersja PDF}}

**Transakcja** to zbiór operacji na bazie danych, które mogą być wykonane jedynie wszystkie lub żadna.

Transakcja składa się zawsze z 3 etapów:
  * rozpoczęcia (''BEGIN'')
 
  * wykonania 
 
  * zamknięcia (''COMMIT'' - zatwierdzenie, ''ROLLBACK'' - anulowanie)
 
W systemach bazodanowych istotne jest, aby transakcja trwała jak najkrócej. Każdy etap transakcji jest logowany. W razie awarii systemu dzięki zawartości logów można odtworzyć stan sprzed transakcji, która nie została zamknięta.

Transakcje opisuje zasada **ACID** - Atomicity, Consistency, Isolation, and Durability:

  * Atomicity (niepodzielna) - transakcja może być wykonana tylko w całości albo wcale.
 
  * Consistency (spójna) - stan bazy danych zawsze przedstawia stan przed lub po transakcji. Zapytania składane systemowi w czasie wykonywania transakcji muszą pokazywać sytuację przed transakcją, nie sytuację przejściową.
 
  * Isolation (odizolowana) - transakcja dzieje się niezależnie od innych wykonywanych operacji, w tym od innych transakcji.
 
  * Durability (trwała) - w przypadku krachu całego systemu bazodanowego, np. w wyniku odcięcia elektryczności, transakcja będzie albo wykonana w całości albo wcale.
 

====== Poziomy izolacji ANSI ======

^Poziom izolacji ANSI/ISO ^Brudny odczyt ^Odczyt nie dający się powtórzyć ^Widmo ^
^READ UNCOMMITED (Odczyt niezatwierdzony) |możliwy |możliwy |możliwy |
^READ COMMITED (Odczyt zatwierdzony) |niemożliwy |możliwy |możliwy |
^REPEATABLE READ (Odczyt dający sie powtórzyć) |niemożliwy |niemożliwy |możliwy |
^SERIALIZABLE (Odczyt uszeregowany) |niemożliwy |niemożliwy |niemożliwy |

**Brudny odczyt** następuje wtedy gdy odczytane zostają informacje zmienione przez transakcje, która nie została jeszcze zatwierdzona.

**Odczyt nie dający się powtórzyć** to sytuacja w której transakcja odczytuje dane, następnie odczytuje je ponownie i dane te nie są identyczne. Sytuacja taka zachodzi jeżeli transakcje w trakcie swego wykonywania odczytują dane znajdujące się w bazie w momencie złożenia zapytania, a nie w momencie rozpoczęcia transakcji.

**Odczyt widmo** następuje w momencie gdy jedna transakcja modyfikuje dane, a druga w tym samym momencie (przed zakończeniem pierwszej) dodaje dane. W takiej sytuacji dane dodane w drugiej transakcji mogą nie być zmodyfikowane przez pierwszą.

Poziom izolacji transakcji ustawia się za pomocą polecenia:

''SET TRANSACTION LEVEL poziom''

Różne SZBD oferują różne poziomy izolacji. Zazwyczaj poziomem domyślnym jest ''READ COMMITED''.