PostgreSQL - TRANSAKCJE
Transakcja to jednostka pracy wykonywana na bazie danych. Transakcje to jednostki lub sekwencje pracy wykonane w logicznej kolejności, czy to ręcznie przez użytkownika, czy automatycznie przez jakiś program bazodanowy.
Transakcja to propagacja jednej lub więcej zmian w bazie danych. Na przykład, jeśli tworzysz rekord, aktualizujesz rekord lub usuwasz rekord z tabeli, to wykonujesz transakcję na tabeli. Kontrolowanie transakcji jest ważne, aby zapewnić integralność danych i radzić sobie z błędami bazy danych.
W praktyce wiele zapytań PostgreSQL zostanie umieszczonych w grupie i wykonasz je wszystkie razem jako część transakcji.
Właściwości transakcji
Transakcje mają następujące cztery standardowe właściwości, zwykle określane skrótem ACID -
Atomicity- Zapewnia pomyślne zakończenie wszystkich operacji w jednostce pracy; w przeciwnym razie transakcja jest przerywana w momencie niepowodzenia, a poprzednie operacje są przywracane do ich poprzedniego stanu.
Consistency - Zapewnia, że baza danych prawidłowo zmienia stany po pomyślnym zatwierdzeniu transakcji.
Isolation - Umożliwia niezależne i przejrzyste transakcje transakcji.
Durability - Zapewnia, że wynik lub skutek zatwierdzonej transakcji będzie się utrzymywał w przypadku awarii systemu.
Kontrola transakcji
Następujące polecenia służą do sterowania transakcjami -
BEGIN TRANSACTION - Aby rozpocząć transakcję.
COMMIT - Aby zapisać zmiany, możesz użyć alternatywnie END TRANSACTION Komenda.
ROLLBACK - Aby cofnąć zmiany.
Transakcyjne polecenia sterujące są używane tylko z poleceniami DML INSERT, UPDATE i DELETE. Nie można ich używać podczas tworzenia tabel lub usuwania ich, ponieważ te operacje są automatycznie zatwierdzane w bazie danych.
Polecenie BEGIN TRANSACTION
Transakcje można rozpocząć za pomocą polecenia BEGIN TRANSACTION lub po prostu polecenia BEGIN. Takie transakcje zwykle trwają do momentu napotkania następnej komendy COMMIT lub ROLLBACK. Ale transakcja zostanie również ROLLBACK, jeśli baza danych zostanie zamknięta lub jeśli wystąpi błąd.
Poniżej przedstawiono prostą składnię do rozpoczęcia transakcji -
BEGIN;
or
BEGIN TRANSACTION;
Polecenie COMMIT
Polecenie COMMIT jest poleceniem transakcyjnym używanym do zapisywania zmian wywołanych przez transakcję w bazie danych.
Polecenie COMMIT zapisuje wszystkie transakcje w bazie danych od ostatniego polecenia COMMIT lub ROLLBACK.
Składnia polecenia COMMIT jest następująca -
COMMIT;
or
END TRANSACTION;
Polecenie ROLLBACK
Polecenie ROLLBACK jest poleceniem transakcyjnym używanym do cofania transakcji, które nie zostały jeszcze zapisane w bazie danych.
Komendy ROLLBACK można używać tylko do cofania transakcji od czasu wydania ostatniej komendy COMMIT lub ROLLBACK.
Składnia polecenia ROLLBACK jest następująca -
ROLLBACK;
Przykład
Rozważmy, że tabela COMPANY zawiera następujące rekordy -
id | name | age | address | salary
----+-------+-----+-----------+--------
1 | Paul | 32 | California| 20000
2 | Allen | 25 | Texas | 15000
3 | Teddy | 23 | Norway | 20000
4 | Mark | 25 | Rich-Mond | 65000
5 | David | 27 | Texas | 85000
6 | Kim | 22 | South-Hall| 45000
7 | James | 24 | Houston | 10000
Teraz zacznijmy transakcję i usuńmy rekordy z tabeli mające wiek = 25 i na koniec używamy polecenia ROLLBACK, aby cofnąć wszystkie zmiany.
testdb=# BEGIN;
DELETE FROM COMPANY WHERE AGE = 25;
ROLLBACK;
Jeśli sprawdzisz, tabela COMPANY nadal zawiera następujące rekordy -
id | name | age | address | salary
----+-------+-----+-----------+--------
1 | Paul | 32 | California| 20000
2 | Allen | 25 | Texas | 15000
3 | Teddy | 23 | Norway | 20000
4 | Mark | 25 | Rich-Mond | 65000
5 | David | 27 | Texas | 85000
6 | Kim | 22 | South-Hall| 45000
7 | James | 24 | Houston | 10000
Teraz zacznijmy kolejną transakcję i usuńmy rekordy z tabeli mające wiek = 25 i na koniec używamy polecenia COMMIT, aby zatwierdzić wszystkie zmiany.
testdb=# BEGIN;
DELETE FROM COMPANY WHERE AGE = 25;
COMMIT;
Jeśli sprawdzisz tabelę COMPANY, nadal zawiera ona następujące rekordy -
id | name | age | address | salary
----+-------+-----+------------+--------
1 | Paul | 32 | California | 20000
3 | Teddy | 23 | Norway | 20000
5 | David | 27 | Texas | 85000
6 | Kim | 22 | South-Hall | 45000
7 | James | 24 | Houston | 10000
(5 rows)