HSQLDB - transakcje

ZA Transactionto sekwencyjna grupa operacji manipulowania bazą danych, która jest wykonywana i traktowana jako jedna jednostka pracy. Innymi słowy, gdy wszystkie operacje zostaną pomyślnie wykonane, dopiero wtedy cała transakcja zostanie zakończona. Jeśli jakakolwiek operacja w ramach transakcji nie powiedzie się, cała transakcja zakończy się niepowodzeniem.

Właściwości transakcji

Zasadniczo transakcja obsługuje 4 standardowe właściwości. Można je nazwać właściwościami ACID.

Atomicity - Wszystkie operacje w transakcjach są wykonywane pomyślnie, w przeciwnym razie transakcja zostanie przerwana w momencie niepowodzenia, a poprzednie operacje zostaną cofnięte do poprzedniej pozycji.

Consistency - Baza danych prawidłowo zmienia stany po pomyślnym zatwierdzeniu transakcji.

Isolation - Umożliwia niezależne działanie transakcji i wzajemną przejrzystość.

Durability - Wynik lub skutek zatwierdzonej transakcji utrzymuje się w przypadku awarii systemu.

Zatwierdź, Wycofaj i Zapisz

Te słowa kluczowe są używane głównie w transakcjach HSQLDB.

Commit- Zawsze zakończona sukcesem transakcja powinna zostać zakończona wykonaniem polecenia COMMIT.

Rollback - Jeśli w transakcji wystąpi błąd, należy wykonać polecenie ROLLBACK, aby przywrócić poprzedni stan każdej tabeli, do której odwołuje się transakcja.

Savepoint - Tworzy punkt w grupie transakcji, w którym ma nastąpić wycofanie.

Przykład

Poniższy przykład wyjaśnia koncepcję transakcji wraz z zatwierdzaniem, wycofywaniem i zapisywaniem. Rozważmy tabelę Klienci z kolumnami id, imię i nazwisko, wiek, adres i wynagrodzenie.

ID Nazwa Wiek Adres Wynagrodzenie
1 Ramesh 32 Ahmedabad 2000,00
2 Karun 25 Delhi 1500,00
3 Kaushik 23 Kota 2000,00
4 Chaitanya 25 Bombaj 6500,00
5 Harish 27 Bhopal 8500,00
6 Kamesh 22 poseł 1500,00
7 Murali 24 Indore 10000,00

Użyj poniższych poleceń, aby utworzyć tabelę klientów zgodnie z powyższymi danymi.

CREATE TABLE Customer (id INT NOT NULL, name VARCHAR(100) NOT NULL, age INT NOT
NULL, address VARCHAR(20), Salary INT, PRIMARY KEY (id));
Insert into Customer values (1, "Ramesh", 32, "Ahmedabad", 2000);
Insert into Customer values (2, "Karun", 25, "Delhi", 1500);
Insert into Customer values (3, "Kaushik", 23, "Kota", 2000);
Insert into Customer values (4, "Chaitanya", 25, "Mumbai", 6500);
Insert into Customer values (5, "Harish", 27, "Bhopal", 8500);
Insert into Customer values (6, "Kamesh", 22, "MP", 1500);
Insert into Customer values (7, "Murali", 24, "Indore", 10000);

Przykład COMMIT

Następujące zapytanie usuwa wiersze z tabeli mające wiek = 25 i używa polecenia COMMIT, aby zastosować te zmiany w bazie danych.

DELETE FROM CUSTOMERS WHERE AGE = 25;
COMMIT;

Po wykonaniu powyższego zapytania otrzymasz następujące dane wyjściowe.

2 rows effected

Po pomyślnym wykonaniu powyższego polecenia sprawdź rekordy tabeli klientów, wykonując poniższe polecenie.

Select * from Customer;

Po wykonaniu powyższego zapytania otrzymasz następujące dane wyjściowe.

+----+----------+-----+-----------+----------+
| ID |   NAME   | AGE |   ADDRESS |  SALARY  |
+----+----------+-----+-----------+----------+
| 1  |  Ramesh  |  32 | Ahmedabad |   2000   |
| 3  |  kaushik |  23 |   Kota    |   2000   |
| 5  |  Harish  |  27 |   Bhopal  |   8500   |
| 6  |  Kamesh  |  22 |    MP     |   4500   |
| 7  |  Murali  |  24 |   Indore  |   10000  |
+----+----------+-----+-----------+----------+

Przykład wycofania

Rozważmy tę samą tabelę klienta jako dane wejściowe.

ID Nazwa Wiek Adres Wynagrodzenie
1 Ramesh 32 Ahmedabad 2000,00
2 Karun 25 Delhi 1500,00
3 Kaushik 23 Kota 2000,00
4 Chaitanya 25 Bombaj 6500,00
5 Harish 27 Bhopal 8500,00
6 Kamesh 22 poseł 1500,00
7 Murali 24 Indore 10000,00

Oto przykładowe zapytanie, które wyjaśnia funkcje wycofywania zmian, usuwając rekordy z tabeli mające wiek = 25, a następnie CZYSZCZENIE zmian w bazie danych.

DELETE FROM CUSTOMERS WHERE AGE = 25;
ROLLBACK;

Po pomyślnym wykonaniu powyższych dwóch zapytań można wyświetlić dane rekordu w tabeli Klient za pomocą następującego polecenia.

Select * from Customer;

Po wykonaniu powyższego polecenia otrzymasz następujące dane wyjściowe.

+----+----------+-----+-----------+----------+
| ID |   NAME   | AGE |   ADDRESS |  SALARY  |
+----+----------+-----+-----------+----------+
|  1 |  Ramesh  |  32 | Ahmedabad |   2000   |
|  2 |  Karun   |  25 |   Delhi   |   1500   |
|  3 |  Kaushik |  23 |   Kota    |   2000   |
|  4 | Chaitanya|  25 |   Mumbai  |   6500   |
|  5 |  Harish  |  27 |   Bhopal  |   8500   |
|  6 |  Kamesh  |  22 |     MP    |   4500   |
|  7 |  Murali  |  24 |    Indore |   10000  |
+----+----------+-----+-----------+----------+

Zapytanie usuwające usuwa dane rekordów klientów, których wiek = 25 lat. Polecenie Wycofywanie cofa te zmiany w tabeli Klient.

Przykład dla Savepoint

Punkt zapisu to punkt w transakcji, w którym można cofnąć transakcję do określonego punktu bez cofania całej transakcji.

Rozważmy tę samą tabelę klienta jako dane wejściowe.

ID Nazwa Wiek Adres Wynagrodzenie
1 Ramesh 32 Ahmedabad 2000,00
2 Karun 25 Delhi 1500,00
3 Kaushik 23 Kota 2000,00
4 Chaitanya 25 Bombaj 6500,00
5 Harish 27 Bhopal 8500,00
6 Kamesh 22 poseł 1500,00
7 Murali 24 Indore 10000,00

Rozważmy w tym przykładzie, że planujesz usunąć trzy różne rekordy z tabeli Klienci. Chcesz utworzyć punkt zapisu przed każdym usunięciem, aby móc w dowolnym momencie cofnąć się do dowolnego punktu zapisu, aby przywrócić odpowiednie dane do ich pierwotnego stanu.

Oto seria operacji.

SAVEPOINT SP1;
DELETE FROM CUSTOMERS WHERE ID = 1;
SAVEPOINT SP2;
DELETE FROM CUSTOMERS WHERE ID = 2;
SAVEPOINT SP3;
DELETE FROM CUSTOMERS WHERE ID = 3;

Teraz utworzyłeś trzy punkty zapisu i usunąłeś trzy rekordy. W tej sytuacji, jeśli chcesz wycofać rekordy o Id 2 i 3, użyj następującego polecenia Wycofaj.

ROLLBACK TO SP2;

Zauważ, że tylko pierwsze usunięcie miało miejsce od czasu przywrócenia dodatku SP2. Użyj następującego zapytania, aby wyświetlić wszystkie rekordy klientów.

Select * from Customer;

Po wykonaniu powyższego zapytania otrzymasz następujące dane wyjściowe.

+----+----------+-----+-----------+----------+
| ID |   NAME   | AGE |   ADDRESS |  SALARY  |
+----+----------+-----+-----------+----------+
|  2 |   Karun  |  25 |  Delhi    |   1500   |
|  3 |  Kaushik |  23 |  Kota     |   2000   |
|  4 | Chaitanya|  25 |  Mumbai   |   6500   |
|  5 |  Harish  |  27 |  Bhopal   |   8500   |
|  6 |  Kamesh  |  22 |  MP       |   4500   |
|  7 |  Murali  |  24 |  Indore   |  10000   |
+----+----------+-----+-----------+----------+

Zwolnij punkt zapisu

Możemy zwolnić punkt zapisu za pomocą polecenia RELEASE. Poniżej znajduje się ogólna składnia.

RELEASE SAVEPOINT SAVEPOINT_NAME;