Głębiej
Transakcja wyznacza granice jednostki pracy. Daje własności ACID (w różnym stopniu zależnie od isolation level):
- **Atomicity**: wszystko albo nic.
- **Consistency**: zachowanie constraintów/invariantów (zakładając poprawną logikę).
- **Isolation**: transakcje równoległe nie widzą się w niebezpieczny sposób.
- **Durability**: po commit dane przetrwają awarię.
Przykład (po co)
Przelew nie może „zgubić” pieniędzy: 1) odejmij z konta A 2) dodaj na konto B Jeśli krok 2 się nie uda, musisz zrobić rollback kroku 1.
Praktyka
- Trzymaj transakcje krótkie (długie trzymają locki albo wersje MVCC).
- Modyfikuj wiersze w stałej kolejności, żeby zmniejszyć deadlocki.
- Uwzględnij retry na błędy przejściowe (np. konflikty serializacji).
Typowe pułapki
- Wywołania sieciowe w transakcji (wolne + wydłużają trzymanie locków).
- Założenie, że transakcje same rozwiążą race condition bez właściwego isolation/locking.
- Połknięcie błędu i przypadkowy commit części pracy.