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

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


examination:bd:question48

Вопрос №48. Определение транзакции, инструкции SQL по обработке транзакций

Транзакция - совокупность операций над данными, которая, с точки зрения обработки данных, либо выполняется полностью, либо совсем не выполняется. Транзакция либо должна завершиться полностью, либо система должна быть возвращена в исходное состояние.

В конце 1970-х Джим Грей выделил следующие характеристики транзакций:

  • Атомарность (Atomicity)
  • Непротиворечивость (Consistency)
  • Изолированность (Isolation)
  • Долговечность (Durability)

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

В SQL обработка транзакций реализована с помощью следующих инструкций:

  • BEGIN TRANSACTION сообщает о начале транзакции. В стандарте ANSI/ISO не употребляется, окончание предыдущей транзакции обозначает начало следующей.
  • COMMIT WORK (в стандарте Sybase: COMMIT TRANSACTION) сообщает об успешном окончании транзакции.
  • SAVE TRANSACTION <имя транзакции>(только в Sybase) создает внутри транзакции точку сохранения.
  • ROLLBACK WORK сообщает о неуспешном завершении транзакции. Возвращает БД в состояние, в котором она была до начала транзакции.
examination/bd/question48.txt · Последние изменения: 2014/01/15 12:12 (внешнее изменение)