Транзакция — это последовательная группа операций манипулирования базой данных, которая выполняется и рассматривается как одна единица работы. Другими словами, когда все операции успешно выполнены, только тогда вся транзакция будет завершена. Если какая-либо операция в транзакции завершится неудачей, вся транзакция завершится неудачей.
Свойства сделок
По сути, транзакция поддерживает 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. Ниже приводится общий синтаксис.