Инструменты пользователя

Инструменты сайта


т:транзакция

Транзакция

Транзакция – атомарная (неделимая) последовательность выполнения операций, воздействующих на базу данных. Атомарность операций заключается в том, что в рамках транзакции будут либо выполнены все операции, либо не выполнена ни одна. Таким образом по окончании транзакции БД либо в случае успеха всех операций придёт в новое целевое состояние, либо в случае неудачи на одном из этапов её состояние откатится к исходному.

Понятие транзакции и его объяснение

Понятие транзакции пришло из бухгалтерской терминологии, где под транзакцией (по-русски, проводкой) подразумеваются записи в бухгалтерских книгах. В простейшем случае в проводке отражаются два счёта: дебет (на который происходит зачисление) и кредит (с которого происходит списание). И соответственно, чтобы сама по себе эта бухгалтерская операция имела смысл, соответствующее изменение должно быть либо отражено на обоих счетах, либо не отражено вовсе (тогда проводка не состоится).

Обычно объясняют это понятие ещё проще, говоря, что, чтобы перевести средства со счёта на счёт, их необходимо списать с одного счёта и записать на другой. Причём допустимым будет либо выполнение сразу двух операций, либо невыполнение ни одной.

Неявные и явные транзакции

Неявные транзакции

Для реляционных СУБД нормально выполнять отдельные операции над БД, такие как INSERT, UPDATE или DELETE, внутри транзакций. Неявными их называют потому, что мы не пишем никаких инструкций, предписывающих начать транзакцию. Это происходит под капотом. Если СУБД для таких транзакций сама фиксирует результат или откатывает изменения, то говорят, что подобные транзакции выполняются в режиме автофиксации.

Также возможна следующая ситуация: если в SQL Server установить значение опции IMPLICIT_TRANSACTIONS равным ON, то заканчивать неявные транзакции придётся вручную (это грубо говоря, вообще см. документацию). Некоторые СУБД по умолчанию выдвигают требование к пользователю закрывать неявные транзакции.

Явные транзакции

Если же возникает необходимость выполнить несколько операций внутри одной транзакции, то запустить такую транзакцию нужно явно, с помощью соответствующего оператора, например, BEGIN TRANSACTION. Затем пишутся операции, которые необходимо выполнить внутри транзакции. Для завершения выполнения транзакции также необходимо воспользоваться специальным оператором, например, COMMIT или ROLLBACK, в зависимости от того, хотим ли мы зафиксировать или откатить изменения.

Базы данных
База данныхСУБДТранзакция

Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki