От автора: транзакция — это единица работы, которая выполняется в отношении базы данных. Транзакции SQL — это единицы работы или последовательности действий, выполненных в логическом порядке: вручную или автоматически с помощью какой-либо программы базы данных.
Транзакция — это осуществление одного или нескольких изменений базы данных. Например, если вы создаете, обновляете или удаляете запись из таблицы, вы выполняете в этой таблице транзакцию. Важно контролировать транзакции, чтобы обеспечить целостность данных и обрабатывать ошибки базы данных.
Практически вы собираете множество SQL-запросов в группу, и они будут выполняться вместе как часть транзакции.
Свойства транзакций
Транзакции имеют следующие четыре стандартных свойства, обычно обозначаемых аббревиатурой ACID.
Атомарность – обеспечивает, чтобы все операции входящие в единицу работы были завершены успешно. В противном случае транзакция прерывается в момент сбоя, и все предыдущие операции возвращаются в прежнее состояние.
Согласованность — обеспечивает, чтобы база данных надлежащим образом изменяла состояние при успешной транзакции.
Изолированность — позволяет транзакциям работать независимо друг от друга и прозрачно.
Долговечность — гарантирует, что результат совершенной транзакции сохранится в случае сбоя системы.
Управление транзакциями
Для управления транзакциями используются следующие команды.
COMMIT — сохранить изменения.
ROLLBACK — отменить изменения.
SAVEPOINT — создает точки сохранения в группах транзакций.
SET TRANSACTION — помещает имя в транзакцию.
Команды управления транзакциями
Команды управления транзакциями используются только с командами DML, такими как — INSERT, UPDATE и DELETE. Они не могут использоваться при создании таблиц или их удалении, поскольку эти операции автоматически фиксируются в базе данных.
Команда COMMIT
Команда COMMIT — это транзакционная команда, используемая для сохранения изменений внесенных транзакцией в базу данных. Команда COMMIT сохраняет все транзакции в базе данных с момента выполнения последней команды COMMIT или ROLLBACK.
Синтаксис команды COMMIT следующий.
1 |
COMMIT; |
Пример
Рассмотрим таблицу CUSTOMERS, содержащую следующие записи:
Ниже приведен пример, в котором из таблицы будут удалены клиенты с возрастом = 25, а затем эти изменения будут сохранены в базе данных.
1 2 3 |
DELETE FROM CUSTOMERS WHERE AGE = 25; COMMIT; |
Таким образом, из таблицы будут удалены две строки, и результат выполнения инструкции SELECT будет выглядеть следующим образом.
Команда ROLLBACK
Команда ROLLBACK — это транзакционная команда, используемая для отмены транзакций, которые еще не были сохранены в базе данных. Эта команда может использоваться только для отмены транзакций с момента выполнения последней команды COMMIT или ROLLBACK.
Синтаксис команды ROLLBACK следующий:
1 |
ROLLBACK; |
Пример
Рассмотрим таблицу CUSTOMERS, содержащую следующие записи:
Ниже приведен пример, в котором из базы данных будут удалены все записи для которых возраст = 25, а затем эти изменения будут отменены.
1 2 3 |
DELETE FROM CUSTOMERS WHERE AGE = 25; ROLLBACK; |
Таким образом, операция удаления не приведет к изменениям в таблице, и результат выполнения инструкции SELECT будет выглядеть следующим образом.
Команда SAVEPOINT
SAVEPOINT – это точка транзакции, к которой вы можете вернуть транзакцию, не откатывая ее полностью. Синтаксис команды SAVEPOINT приведен ниже.
1 |
SAVEPOINT SAVEPOINT_NAME; |
Эта команда предназначена только для создания SAVEPOINT в других транзакционных операторах. Команда ROLLBACK используется для отмены группы транзакций до точки SAVEPOINT.
Синтаксис, который используется для возврата к SAVEPOINT, показан ниже.
1 |
ROLLBACK TO SAVEPOINT_NAME; |
Ниже приведен пример ситуации, когда мы планируем удалить три разных записи из таблицы CUSTOMERS. Мы можем создать SAVEPOINT перед каждым удалением, чтобы иметь возможность откатить операцию к любой SAVEPOINT любое время и вернуть данные в исходное состояние.
Пример
Рассмотрим таблицу CUSTOMERS, содержащую следующие записи.
Следующий блок кода содержит ряд операций.
1 2 3 4 5 6 7 8 9 10 11 12 |
SAVEPOINT SP1; Savepoint created. DELETE FROM CUSTOMERS WHERE ID=1; 1 row deleted. SAVEPOINT SP2; Savepoint created. DELETE FROM CUSTOMERS WHERE ID=2; 1 row deleted. SAVEPOINT SP3; Savepoint created. DELETE FROM CUSTOMERS WHERE ID=3; 1 row deleted. |
Теперь, после того как были выполнены изменения, предположим, что вы передумали и решили откатить операцию к точке SAVEPOINT, которую вы определили как SP2. Поскольку SP2 была создана после первого удаления, последние два удаления будут отменены:
1 2 |
ROLLBACK TO SP2; Rollback complete. |
Обратите внимание, что перед тем как мы вернулись к SP2, было произведено первое удаление
Команда RELEASE SAVEPOINT
Команда RELEASE SAVEPOINT используется для удаления созданной точки SAVEPOINT. Синтаксис команды RELEASE SAVEPOINT следующий.
1 |
RELEASE SAVEPOINT SAVEPOINT_NAME; |
После того как SAVEPOINT будет удалена, вы больше не сможете использовать команду ROLLBACK для отмены транзакций, выполненных после последней SAVEPOINT.
Команда SET TRANSACTION
Команда SET TRANSACTION может использоваться для инициирования транзакции базы данных. Эта команда используется для указания характеристик транзакций, которая задается после команды. Например, вы можете задать для транзакции режим только чтения или чтение и запись. Синтаксис команды SET TRANSACTION следующий.
1 |
SET TRANSACTION [ READ WRITE | READ ONLY ]; |
Источник: //www.tutorialspoint.com/
Редакция: Команда webformyself.