SQLite - 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, aktualizujesz lub usuwasz rekord z tabeli, to wykonujesz transakcję na tabeli. Kontrolowanie transakcji jest ważne, aby zapewnić integralność danych i obsługiwać błędy bazy danych.
W praktyce wiele zapytań SQLite połączysz w grupę i wykonasz wszystkie razem w ramach 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 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
Poniżej znajdują się polecenia służące 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. Jednak transakcja zostanie również ROLLBACK, jeśli baza danych zostanie zamknięta lub jeśli wystąpi błąd. Poniżej znajduje się prosta składnia do rozpoczęcia transakcji.
BEGIN;
or
BEGIN TRANSACTION;
COMMIT Command
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.
Poniżej znajduje się składnia polecenia COMMIT.
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.
Poniżej przedstawiono składnię polecenia ROLLBACK.
ROLLBACK;
Example
Weź pod uwagę tabelę COMPANY z następującymi rekordami.
ID NAME AGE ADDRESS SALARY
---------- ---------- ---------- ---------- ----------
1 Paul 32 California 20000.0
2 Allen 25 Texas 15000.0
3 Teddy 23 Norway 20000.0
4 Mark 25 Rich-Mond 65000.0
5 David 27 Texas 85000.0
6 Kim 22 South-Hall 45000.0
7 James 24 Houston 10000.0
Teraz zacznijmy transakcję i usuńmy rekordy z tabeli o wieku = 25. Następnie użyj polecenia ROLLBACK, aby cofnąć wszystkie zmiany.
sqlite> BEGIN;
sqlite> DELETE FROM COMPANY WHERE AGE = 25;
sqlite> ROLLBACK;
Teraz, jeśli sprawdzisz tabelę COMPANY, nadal zawiera ona następujące rekordy -
ID NAME AGE ADDRESS SALARY
---------- ---------- ---------- ---------- ----------
1 Paul 32 California 20000.0
2 Allen 25 Texas 15000.0
3 Teddy 23 Norway 20000.0
4 Mark 25 Rich-Mond 65000.0
5 David 27 Texas 85000.0
6 Kim 22 South-Hall 45000.0
7 James 24 Houston 10000.0
Zacznijmy kolejną transakcję i usuńmy rekordy z tabeli mające wiek = 25 i na koniec używamy polecenia COMMIT, aby zatwierdzić wszystkie zmiany.
sqlite> BEGIN;
sqlite> DELETE FROM COMPANY WHERE AGE = 25;
sqlite> COMMIT;
Jeśli teraz sprawdzisz, tabela FIRMA nadal zawiera następujące rekordy -
ID NAME AGE ADDRESS SALARY
---------- ---------- ---------- ---------- ----------
1 Paul 32 California 20000.0
3 Teddy 23 Norway 20000.0
5 David 27 Texas 85000.0
6 Kim 22 South-Hall 45000.0
7 James 24 Houston 10000.0