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