T-SQL - Транзакции
А transactionэто единица работы, которая выполняется в отношении базы данных. Транзакции - это единицы или последовательности работы, выполняемые в логическом порядке, будь то вручную пользователем или автоматически какой-либо программой базы данных.
Транзакция - это распространение одного или нескольких изменений в базу данных. Например, если вы создаете запись или обновляете запись или удаляете запись из таблицы, то вы выполняете транзакцию с таблицей. Важно контролировать транзакции, чтобы гарантировать целостность данных и обрабатывать ошибки базы данных.
Фактически вы объедините множество SQL-запросов в группу и будете выполнять их все вместе как часть транзакции.
Свойства транзакций
Транзакции имеют следующие четыре стандартных свойства, обычно обозначаемых аббревиатурой ACID:
Atomicity- Гарантирует, что все операции в рамках единицы работы завершены успешно; в противном случае транзакция прерывается в момент сбоя, а предыдущие операции возвращаются в исходное состояние.
Consistency - Обеспечивает правильное изменение состояния базы данных после успешной транзакции.
Isolation - Позволяет транзакциям работать независимо и прозрачно друг для друга.
Durability - Гарантирует сохранение результата или эффекта зафиксированной транзакции в случае сбоя системы.
Контроль транзакций
Для управления транзакциями используются следующие команды:
COMMIT - Чтобы сохранить изменения.
ROLLBACK - Откатить изменения.
SAVEPOINT - Создает точки в группах транзакций для ОТКАТА.
SET TRANSACTION - Добавляет имя в транзакцию.
Команды управления транзакциями используются только с командами DML INSERT, UPDATE и DELETE. Их нельзя использовать при создании таблиц или их удалении, потому что эти операции автоматически фиксируются в базе данных.
Чтобы использовать команды управления транзакциями в MS SQL Server, мы должны начинать транзакцию с 'begin tran' или командой start transaction, иначе эти команды не будут работать.
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.
SET TRANSACTION ISOLATION LEVEL <Isolationlevel_name>