Транзакция — это единица работы, выполняемая с базой данных. Транзакции — это единицы или последовательности работы, выполняемые в логическом порядке, либо вручную пользователем, либо автоматически какой-либо программой базы данных.
Транзакция — это распространение одного или нескольких изменений в базе данных. Например, если вы создаете запись или обновляете запись, или удаляете запись из таблицы, то вы выполняете транзакцию для таблицы. Важно контролировать транзакции для обеспечения целостности данных и обработки ошибок базы данных.
Практически вы объедините множество SQL-запросов в группу и выполните все их вместе как часть транзакции.
Свойства сделок
Транзакции имеют следующие четыре стандартных свойства, обычно обозначаемых аббревиатурой ACID —
-
Атомарность — гарантирует, что все операции внутри рабочего блока успешно завершены; в противном случае транзакция прерывается в точке сбоя, а предыдущие операции возвращаются в прежнее состояние.
-
Согласованность — Гарантирует, что база данных корректно меняет состояние после успешно принятой транзакции.
-
Изоляция — позволяет транзакциям работать независимо друг от друга и быть прозрачными друг для друга.
-
Долговечность — Гарантирует, что результат или результат совершенной транзакции сохраняется в случае сбоя системы.
Атомарность — гарантирует, что все операции внутри рабочего блока успешно завершены; в противном случае транзакция прерывается в точке сбоя, а предыдущие операции возвращаются в прежнее состояние.
Согласованность — Гарантирует, что база данных корректно меняет состояние после успешно принятой транзакции.
Изоляция — позволяет транзакциям работать независимо друг от друга и быть прозрачными друг для друга.
Долговечность — Гарантирует, что результат или результат совершенной транзакции сохраняется в случае сбоя системы.
Контроль транзакций
Для управления транзакциями используются следующие команды:
-
COMMIT — сохранить изменения.
-
ROLLBACK — откат изменений.
-
SAVEPOINT — Создает точки в группах транзакций, в которых выполняется ROLLBACK.
-
SET TRANSACTION — помещает имя в транзакцию.
COMMIT — сохранить изменения.
ROLLBACK — откат изменений.
SAVEPOINT — Создает точки в группах транзакций, в которых выполняется ROLLBACK.
SET TRANSACTION — помещает имя в транзакцию.
Команды управления транзакциями используются только с командами DML INSERT, UPDATE и DELETE. Их нельзя использовать при создании таблиц или их удалении, поскольку эти операции автоматически фиксируются в базе данных.
Чтобы использовать команды управления транзакциями в MS SQL Server, мы должны начинать транзакцию с команды ‘begin trans’ или начинать транзакцию, в противном случае эти команды не будут работать.
Команда COMMIT
Команда COMMIT — это команда транзакций, используемая для сохранения изменений, вызванных транзакцией, в базу данных. Эта команда сохраняет все транзакции в базе данных с момента последней команды COMMIT или ROLLBACK.
Синтаксис
Ниже приведен синтаксис команды COMMIT.
COMMIT;
пример
Рассмотрим таблицу CUSTOMERS, имеющую следующие записи.
ID NAME AGE ADDRESS SALARY 1 Ramesh 32 Ahmedabad 2000.00 2 Khilan 25 Delhi 1500.00 3 kaushik 23 Kota 2000.00 4 Chaitali 25 Mumbai 6500.00 5 Hardik 27 Bhopal 8500.00 6 Komal 22 MP 4500.00 7 Muffy 24 Indore 10000.00
В следующем примере команды удаляются записи из таблицы, имеющие возраст = 25, а затем фиксируются изменения в базе данных.
Begin Tran DELETE FROM CUSTOMERS WHERE AGE = 25 COMMIT
В результате две строки из таблицы будут удалены, и инструкция SELECT выдаст следующий результат.
ID NAME AGE ADDRESS SALARY 1 Ramesh 32 Ahmedabad 2000.00 3 kaushik 23 Kota 2000.00 5 Hardik 27 Bhopal 8500.00 6 Komal 22 MP 4500.00 7 Muffy 24 Indore 10000.00
Команда ROLLBACK
Команда ROLLBACK — это команда транзакций, используемая для отмены транзакций, которые еще не были сохранены в базе данных. Эта команда может использоваться только для отмены транзакций с момента выполнения последней команды COMMIT или ROLLBACK.
Синтаксис
Ниже приведен синтаксис команды ROLLBACK.
ROLLBACK
пример
Рассмотрим таблицу CUSTOMERS, имеющую следующие записи.
ID NAME AGE ADDRESS SALARY 1 Ramesh 32 Ahmedabad 2000.00 2 Khilan 25 Delhi 1500.00 3 kaushik 23 Kota 2000.00 4 Chaitali 25 Mumbai 6500.00 5 Hardik 27 Bhopal 8500.00 6 Komal 22 MP 4500.00 7 Muffy 24 Indore 10000.00
Следующий пример команды удалит записи из таблицы, имеющие возраст = 25, а затем откатит изменения в базе данных.
Begin Tran DELETE FROM CUSTOMERS WHERE AGE = 25; ROLLBACK
В результате операция удаления не повлияет на таблицу, а инструкция SELECT выдаст следующий результат.
ID NAME AGE ADDRESS SALARY 1 Ramesh 32 Ahmedabad 2000.00 2 Khilan 25 Delhi 1500.00 3 kaushik 23 Kota 2000.00 4 Chaitali 25 Mumbai 6500.00 5 Hardik 27 Bhopal 8500.00 6 Komal 22 MP 4500.00 7 Muffy 24 Indore 10000.00
Команда SAVEPOINT
SAVEPOINT — это точка в транзакции, когда вы можете откатить транзакцию до определенной точки без отката всей транзакции.
Синтаксис
Ниже приведен синтаксис команды SAVEPOINT.
SAVE TRANSACTION SAVEPOINT_NAME
Эта команда служит только для создания SAVEPOINT среди операторов транзакций. Команда ROLLBACK используется для отмены группы транзакций.
Ниже приведен синтаксис отката к SAVEPOINT.
ROLLBACK TO SAVEPOINT_NAME
В следующем примере мы удалим три разные записи из таблицы CUSTOMERS. Нам придется создавать SAVEPOINT перед каждым удалением, чтобы мы могли в любой момент выполнить ROLLBACK для любого SAVEPOINT, чтобы вернуть соответствующие данные в исходное состояние.
пример
Рассмотрим таблицу CUSTOMERS, имеющую следующие записи:
ID NAME AGE ADDRESS SALARY 1 Ramesh 32 Ahmedabad 2000.00 2 Khilan 25 Delhi 1500.00 3 kaushik 23 Kota 2000.00 4 Chaitali 25 Mumbai 6500.00 5 Hardik 27 Bhopal 8500.00 6 Komal 22 MP 4500.00 7 Muffy 24 Indore 10000.00
Ниже приводится серия операций —
Begin Tran SAVE Transaction SP1 Savepoint created. DELETE FROM CUSTOMERS WHERE ID = 1 1 row deleted. SAVE Transaction SP2 Savepoint created. DELETE FROM CUSTOMERS WHERE ID = 2 1 row deleted. SAVE Transaction SP3 Savepoint created. DELETE FROM CUSTOMERS WHERE ID = 3 1 row deleted.
Три удаления уже произошли, однако мы передумали и решили откатиться к SAVEPOINT, которую мы определили как SP2. Поскольку SP2 был создан после первого удаления, последние два удаления отменены —
ROLLBACK Transaction SP2 Rollback complete.
Обратите внимание, что произошло только первое удаление, так как мы вернулись к SP2.
SELECT * FROM CUSTOMERS
6 строк выбрано.
ID NAME AGE ADDRESS SALARY 2 Khilan 25 Delhi 1500.00 3 kaushik 23 Kota 2000.00 4 Chaitali 25 Mumbai 6500.00 5 Hardik 27 Bhopal 8500.00 6 Komal 22 MP 4500.00 7 Muffy 24 Indore 10000.00
Команда SET TRANSACTION
Команда SET TRANSACTION может использоваться для запуска транзакции базы данных. Эта команда используется для указания признаков для следующей транзакции.
Синтаксис
Ниже приводится синтаксис для SET TRANSACTION.