poniedziałek, 24 września 2018

SQLite - Transakcje


SQLite - Transakcje

Transakcja jest jednostką pracy wykonywaną względem bazy danych. Transakcje są jednostkami lub sekwencjami pracy wykonanymi w logicznej kolejności, czy to w sposób ręczny przez użytkownika, czy automatycznie za pomocą jakiegoś programu bazodanowego.
Transakcja jest propagacją jednej lub więcej zmian w bazie danych. Na przykład, jeśli tworzysz, aktualizujesz lub usuwasz rekord z tabeli, przeprowadzasz transakcję na tabeli. Ważne jest kontrolowanie transakcji w celu zapewnienia integralności danych i obsługi błędów bazy danych.
Praktycznie, wpuścicie wiele zapytań SQLite do grupy i wykonacie 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.
·      Atomowość - zapewnia pomyślne zakończenie wszystkich operacji w ramach jednostki roboczej; w przeciwnym razie transakcja zostanie przerwana w momencie awarii, a poprzednie operacje zostaną przywrócone do poprzedniego stanu.
·      Spójność - Zapewnia, że ​​baza danych odpowiednio zmienia stany po pomyślnie zatwierdzonej transakcji.
·      Izolacja - umożliwia transakcjom niezależne działanie i przejrzyste względem siebie.
·      Trwałość - zapewnia, że ​​wynik lub skutek zatwierdzonej transakcji będzie się utrzymywał w przypadku awarii systemu.

Kontrola transakcji

Poniżej znajdują się następujące polecenia używane do kontrolowania transakcji:
·      BEGIN TRANSACTION - Aby rozpocząć transakcję.
·      COMMIT - Aby zapisać zmiany, możesz też użyć polecenia END TRANSACTION.
·      ROLLBACK - Aby wycofać zmiany.
Transakcyjne polecenia sterujące są używane tylko w przypadku komend DML INSERT, UPDATE i DELETE. Nie można ich używać podczas tworzenia tabel ani ich usuwania, ponieważ te operacje są automatycznie zatwierdzane w bazie danych.

Polecenie BEGIN TRANSACTION

Transakcje można rozpocząć za pomocą polecenia BEGIN TRANSACTION lub po prostu BEGIN. Takie transakcje zwykle trwają do momentu napotkania następnej komendy COMMIT lub ROLLBACK. Jednak transakcja będzie również ROLLBACK, jeśli baza danych zostanie zamknięta lub wystąpi błąd. Poniżej przedstawiono prostą składnię do rozpoczęcia transakcji.
BEGIN;
lub
BEGIN TRANSACTION;

Polecenie COMMIT

Polecenie COMMIT to transakcyjne polecenie używane do zapisywania zmian wywoływanych przez transakcję do bazy danych.
Polecenie COMMIT zapisuje wszystkie transakcje do bazy danych od ostatniego polecenia COMMIT lub ROLLBACK.
Poniżej znajduje się składnia polecenia COMMIT.
COMMIT;
lub
END TRANSACTION;

Polecenie ROLLBACK

Polecenie ROLLBACK to transakcyjne polecenie używane do cofania transakcji, które nie zostały jeszcze zapisane w bazie danych.
Polecenie ROLLBACK może być użyte tylko do cofnięcia transakcji od wydania ostatniego polecenia COMMIT lub ROLLBACK.
Poniżej znajduje się składnia polecenia ROLLBACK.
ROLLBACK;

Przykład
Rozważ tabelę PRACOWNIK z następującymi zapisami.
id          nazwisko    wiek        adres       pensja
----------  ----------  ----------  ----------  ----------
1           Adam        32          Warszawa    2000.0
2           Piotr       25          Piaseczno   1500.0
3           Tomasz      23          Grodzisk    2000.0
4           Marek       25          Płock       6500.0
5           Dawid       27          Halinów     8500.0
6           Katarzyna   22          Marki       4500.0
7           Jan         24          Kraków      4500.0
8           Paweł       24          Zielonka    3500.0
9           Jan         44          Kobyłka     5000.0
10          Jan         45          Nieporęt    5000.0
Teraz, rozpocznijmy transakcję i usuń rekordy z tabeli o wieku = 25. Następnie użyj polecenia ROLLBACK, aby cofnąć wszystkie zmiany.
sqlite> BEGIN;
sqlite> DELETE FROM PRACOWNIK WHERE WIEK = 25;
sqlite> ROLLBACK;
Teraz, jeśli zaznaczysz tabelę PRACOWNIK, nadal ma ona następujące rekordy -
id          nazwisko    wiek        adres       pensja
----------  ----------  ----------  ----------  ----------
1           Adam        32          Warszawa    2000.0
2           Piotr       25          Piaseczno   1500.0
3           Tomasz      23          Grodzisk    2000.0
4           Marek       25          Płock       6500.0
5           Dawid       27          Halinów     8500.0
6           Katarzyna   22          Marki       4500.0
7           Jan         24          Kraków      4500.0
8           Paweł       24          Zielonka    3500.0
9           Jan         44          Kobyłka     5000.0
10          Jan         45          Nieporęt    5000.0
Rozpocznijmy kolejną transakcję i usuń rekordy z tabeli o wieku = 25, a na koniec użyjemy polecenia COMMIT, aby zatwierdzić wszystkie zmiany.
sqlite> BEGIN;
sqlite> DELETE FROM PRACOWNIK WHERE WIEK = 25;
sqlite> COMMIT;
Jeśli teraz sprawdzisz, to tabela PRACOWNIK ma następujące rekordy -
id          nazwisko    wiek        adres       pensja
----------  ----------  ----------  ----------  ----------
1           Adam        32          Warszawa    2000.0
3           Tomasz      23          Grodzisk    2000.0
5           Dawid       27          Halinów     8500.0
6           Katarzyna   22          Marki       4500.0
7           Jan         24          Kraków      4500.0
8           Paweł       24          Zielonka    3500.0
9           Jan         44          Kobyłka     5000.0
10          Jan         45          Nieporęt    5000.0



Brak komentarzy:

Prześlij komentarz