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;