Статья посвящена группам последовательных операций, которые совершаются с базами данных, а именно — транзакциям.
Ключевые слова: базы данных, транзакции, язык SQL
При работе с базой данных существует вероятность испортить или потерять данные.
Приведем пример перевода денег с одного счета на другой. Для этого нужно выполнить несколько операторов SQL. Если в процессе их выполнения произойдет какой-нибудь аппаратный или программный сбой, из-за которого не выполнится один или несколько операторов, то может произойти так, что деньги будут сняты с одного счета, но не поступят на другой. Чтобы этого не произошло, предпринимаются специальные меры, суть которых состоит в том, что несколько SQL-запросов определяются как единый блок, называемый транзакцией. В транзакции либо все операторы выполняются успешно, либо не один из них не выполняется, и база данных возвращается в начальное состояние, в котором она находилась до начала выполнения операторов транзакции.
Из этого следует, что в данном примере необходимо избегать такой ситуации, когда одно из обновлений будет завершено, а другое — нет, поскольку в этом случае база данных находится в несогласованном состоянии.
Синтаксис транзакции предельно прост и понятен. Она начинается с выполнения операции BEGINTRANSACTION и завершается операцией COMMIT или ROLLBACK:
− Оператор COMMIT (завершить выполнение) сигнализирует об удачном окончании транзакции. Он сообщает диспетчеру транзакций, что логическая единица работы удачно завершена, база данных вновь находится (или будет находиться после выполнения этого оператора) в согласованном состоянии, а все запросы и обновления, выполненные данной транзакцией, теперь могут быть зафиксированы, т. е. внесены в базу данных.
− Оператор ROLLBACK (откат) применяется тогда, когда необходимо отменить изменения, внесенные транзакцией, и восстановить базу данных в прежнем состоянии. Оператор сообщает диспетчеру транзакций, что произошел какой-то сбой в системе, база данных находится в несогласованном состоянии и следует осуществить откат всех проведенных при выполнении этой транзакции запросов и обновлений, т. е. они должны быть отменены, а база данных возвращена в исходное состояние.
Характеризуется транзакция четырьмя основными свойствами, обычно называемыми свойствами АСИД — Атомарность, Согласованность. Изолированность, Долговечность. На английском языке эта аббревиатура также обозначается ACID — Atomicity, Consistency, Isolation, Durability.
Атомарность. Транзакция является единой логической единицей, она выполняется полностью или не выполняется вообще. Если выполнение транзакции останавливается на середине, то база данных должна сохраниться в том состоянии, которое она имела до начала выполнения транзакции.
Согласованность (целостность). Транзакция переносит базу данных из одного согласованного (целостного) состояния в другое, также целостное. В процессе выполнения транзакции база данных может временно пребывать в несогласованном состоянии.
Большинство правил целостности базы данных таковы, что их просто нельзя не нарушить, выполнив только один оператор SQL. Такие команды группируют в единую транзакцию, результатом которой является новое согласованное состояние базы данных. В крайнем случае, если транзакция не сумеет довести БД до конечного целостного состояния, она вернется к начальному, также целостному, состоянию.
Изоляция. В реальных информационных системах могут в одно и то же время работать десятки тысяч пользователей, каждый из них запускает свои собственные транзакции. Свойство изоляции значит, что все транзакции выполняются изолированно друг от друга. Наибольшая безопасность достигается при самом высоком уровне изоляции транзакций, однако за это приходится платить снижением общей производительности работы системы.
Несмотря на то, что в каждый момент времени сервер может выполнять параллельно ни одну транзакцию, общий результат их совместной работы гарантированно будет таким же, каким он был бы при их последовательном выполнении. Одновременно выполняющиеся транзакции не должны накладываться друг на друга и не искажают результаты запросов.
Такой режим работы сервера называется сериальным. Транзакции выполняются не параллельно, а последовательно.
Долговременность. После того как транзакция завершила выполнение и зафиксирована оператором COMMIT, результат ее выполнения гарантированно сохраняется в базе данных. При любых системных сбоях, используя ресурсы сервера, можно восстановить все зафиксированные транзакции. Восстановление незафиксированных транзакций сервер, разумеется, не гарантирует.
Таким образом, в данной статье были рассмотрены транзакции, их синтаксис, а именно операторы BEGINTRANSACTION, COMMIT, ROLLBACK, а также 4 основных свойства транзакций (атомарность, согласованность, изоляция и долговременность).
Литература:
- Дейт К. Дж. Введение в системы баз данных, 8-е издание: Пер. с англ. / К. Дж. Дейт. — М: Издательский дом «Вильяме». 2005. — 1328 с.
- Ржеуцкая С. Ю. База данных. Язык SQL: учеб. пособие / С. Ю. Ржеуцкая. — Вологда: ВоГТУ, 2010. — 159 с.
- Дунаев В. В. Базы данных. Язык SQL для студента / В. В. Дунаев. — СПб.: БХВ-Петербург, 2007. — 320 с.