Учебники

HSQLDB — Сделки

Транзакция — это последовательная группа операций манипулирования базой данных, которая выполняется и рассматривается как одна единица работы. Другими словами, когда все операции успешно выполнены, только тогда вся транзакция будет завершена. Если какая-либо операция в транзакции завершится неудачей, вся транзакция завершится неудачей.

Свойства сделок

По сути, транзакция поддерживает 4 стандартных свойства. Они могут упоминаться как свойства ACID.

Атомарность — все операции в транзакциях выполняются успешно, в противном случае транзакция прерывается в точке сбоя, а предыдущие операции откатываются до своей предыдущей позиции.

Согласованность — база данных корректно меняет состояния при успешной фиксации транзакции.

Изоляция — это позволяет транзакции работать независимо друг от друга и быть прозрачными друг для друга.

Долговечность — результат или результат совершенной транзакции сохраняется в случае сбоя системы.

Фиксация, откат и сохранение

Эти ключевые слова в основном используются для транзакций HSQLDB.

Фиксация — всегда успешная транзакция должна быть завершена путем выполнения команды COMMIT.

Откат — Если в транзакции происходит сбой, то должна быть выполнена команда ROLLBACK, чтобы вернуть каждую таблицу, на которую есть ссылка в транзакции, в ее предыдущее состояние.

Точка сохранения — создает точку в группе транзакций для отката.

пример

В следующем примере объясняется концепция транзакций, а также фиксация, откат и точка сохранения. Давайте рассмотрим таблицу «Клиенты» с колонками id, name, age, address и salary.

Я бы название Возраст Адрес Оплата труда
1 Рамеш 32 Ахмедабад 2000,00
2 Карун 25 Дели 1500,00
3 Кошик 23 Kota 2000,00
4 Chaitanya 25 Mumbai 6500,00
5 Хариш 27 Бхопал 8500,00
6 Камеш 22 член парламента 1500,00
7 Murali 24 Индор 10000,00

Используйте следующие команды, чтобы создать таблицу клиентов в соответствии с приведенными выше данными.

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);

Пример для COMMIT

Следующий запрос удаляет строки из таблицы, имеющие возраст = 25, и использует команду COMMIT для применения этих изменений в базе данных.

DELETE FROM CUSTOMERS WHERE AGE = 25;
COMMIT;

После выполнения вышеуказанного запроса вы получите следующий вывод.

2 rows effected

После успешного выполнения вышеуказанной команды проверьте записи таблицы клиентов, выполнив приведенную ниже команду.

Select * from Customer;

После выполнения вышеуказанного запроса вы получите следующий вывод.

+----+----------+-----+-----------+----------+
| 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  |
+----+----------+-----+-----------+----------+

Пример для отката

Давайте рассмотрим ту же таблицу Customer в качестве входных данных.

Я бы название Возраст Адрес Оплата труда
1 Рамеш 32 Ахмедабад 2000,00
2 Карун 25 Дели 1500,00
3 Кошик 23 Kota 2000,00
4 Chaitanya 25 Mumbai 6500,00
5 Хариш 27 Бхопал 8500,00
6 Камеш 22 член парламента 1500,00
7 Murali 24 Индор 10000,00

Вот пример запроса, который объясняет функциональность отката путем удаления записей из таблицы, имеющих возраст = 25, а затем откат изменений в базе данных.

DELETE FROM CUSTOMERS WHERE AGE = 25;
ROLLBACK;

После успешного выполнения вышеупомянутых двух запросов вы можете просмотреть данные записи в таблице Customer, используя следующую команду.

Select * from Customer;

После выполнения вышеуказанной команды вы получите следующий вывод.

+----+----------+-----+-----------+----------+
| 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  |
+----+----------+-----+-----------+----------+

Запрос на удаление удаляет данные записей клиентов, чей возраст = 25 лет. Команда «Откат» откатывает эти изменения в таблице «Клиенты».

Пример для точки сохранения

Точка сохранения — это точка в транзакции, когда вы можете откатить транзакцию до определенной точки без отката всей транзакции.

Давайте рассмотрим ту же таблицу Customer в качестве входных данных.

Я бы название Возраст Адрес Оплата труда
1 Рамеш 32 Ахмедабад 2000,00
2 Карун 25 Дели 1500,00
3 Кошик 23 Kota 2000,00
4 Chaitanya 25 Mumbai 6500,00
5 Хариш 27 Бхопал 8500,00
6 Камеш 22 член парламента 1500,00
7 Murali 24 Индор 10000,00

Давайте рассмотрим в этом примере, вы планируете удалить три разных записи из таблицы «Клиенты». Вы хотите создать точку сохранения перед каждым удалением, чтобы в любой момент можно было вернуться к любой точке сохранения, чтобы вернуть соответствующие данные в исходное состояние.

Вот серия операций.

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

Теперь вы создали три точки сохранения и удалили три записи. В этой ситуации, если вы хотите откатить записи с идентификаторами 2 и 3, используйте следующую команду отката.

ROLLBACK TO SP2;

Обратите внимание, что с момента отката до SP2 произошло только первое удаление. Используйте следующий запрос, чтобы отобразить все записи клиентов.

Select * from Customer;

После выполнения вышеуказанного запроса вы получите следующий вывод.

+----+----------+-----+-----------+----------+
| 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   |
+----+----------+-----+-----------+----------+

Отпустить точку сохранения

Мы можем освободить точку сохранения с помощью команды RELEASE. Ниже приводится общий синтаксис.