Транзакция и ее свойства
Транзакция - действие или серия действий, выполняемых одним пользователем или прикладной программой, которые осуществляют доступ или изменение содержимого БД. Транзакция является логической единицей работы, выполняемой в БД. Она может быть представлена отдельной программой, являться частью алгоритма программы или даже отдельной командой (например, insert, update в SQL) и включать произвольное количество операций, выполняемых в БД. С точки зрения БД, выполнение программы некоторого приложения может расцениваться как серия транзакций, в промежутках между которыми выполняется некоторая обработка данных, осуществляемая вне среды БД. Любая транзакция всегда должна переводить базу данных из одного согласованного состояния в другое, хотя допускается, что согласованность состояния базы будет нарушаться в ходе выполнения транзакции. Любая транзакция завершается одним из двух возможных способов. В случае успешного завершения результаты транзакции фиксируются (commit) в БД, и транзакция переходит в новое согласованное состояние. Если выполнение транзакции не прошло успешно, она отменяется, в этом случае в БД должно быть восстановлено то согласованное состояние, в котором она находилась до начала данной транзакции. Этот процесс называется откатом
(roll back) транзакции. Зафиксированная транзакция не может быть отменена. Если оказывается, что зафиксированная транзакция была ошибочной, потребуется выполнить другую транзакцию, отменяющую действия, выполненные первой транзакцией. В большинстве языков манипулирования данными для указания границ отдельных транзакций используются операторы BEGIN TRANSACTION, COMMIT
и ROLLBACK.
Свойства транзакций.
Существуют некоторые свойства, которыми должна обладать любая из транзакций, это 4 основных свойства (ACID-аббревиатура, составленная из первых букв их английских названий). Атомарность. Это свойство типа «все или ничего». Любая транзакция представляет собой неделимую единицу работы, которая может быть выполнена либо вся целиком, либо не выполнена вовсе. Согласованность.
Каждая транзакция должна переводить БД из одного согласованного состояния в другое согласованное состояние. Внутри транзакции система может находиться в несогласованном состоянии.
Изолированность. Все транзакции выполняются независимо одна от другой. Другими словами, промежуточные результаты незавершенной транзакции не должны быть доступны другим транзакциям. Продолжительность. Результаты успешно завершенной транзакции должны сохраняться в БД постоянно и не должны быть утеряны в результате последующих сбоев.
Транзакция начинается с момента присоединения пользователя к СУБД.
Транзакция будет завершена, если будут выполнены:
1. Ввод оператора COMMIT
означает успешное завершение транзакции. После его выполнения, внесенные в БД изменения, приобретают постоянный характер. После обработки оператора commit ввод любого, инициирующего транзакцию оператора, автоматически вызовет запуск новой транзакции.
2. Команда DDL.
3. Произойдет штатный выход из системы.
Транзакция не будет завершена, если:
1. Подана команда ROLLBACK. Она означает отказ от завершения транзакции, в результате чего выполняется откат всех изменений в БД, внесенных при выполнении этой транзакции. После обработки оператора rollback ввод любого, инициирующего транзакцию оператора, автоматически вызовет запуск новой транзакции.
2. Если произошло некорректное завершение сеанса работы в СУБД.
3. Если произошел какой-то сбой в системе.