7. Управление транзакциями
В процессе выполнения последовательности команд SQL таблицы базы
данных не всегда могут находиться в согласованном состоянии. В случае
возникновения каких-либо сбоев , когда логически связанная
последовательность запросов не доведена до конца , возможно нарушение
целостности данных в базе. Для обеспечения целостности данных логически
связанные последовательности запросов , неделимые с точки зрения
воздействия на базу данных, объединяют в так называемые транзакции.
Запросы, составляющие транзакцию, должны или выполняться все
полностью – с первого до последнего , и тогда транзакция завершается
командой COMMIT, или, если в силу каких-либо внешних причин это
оказывается невозможным, внесенные запросами транзакции изменения в
базе данных должны аннулироваться командой ROLLBACK. Во втором
случае база данных возвращается в целостное состояние на момент,
предшествующий началу транзакции. Это называют откатом транзакции.
Новая транзакция начинается после каждой команды COMMIT или
ROLLBACK.
В большинстве реализаций можно установить параметр , называемый
AUTOCOMMIT. Он будет автоматически запоминать все выполняемые
действия над данными . Действия, которые приведут к ошибке при
незавершенной транзакции, всегда будут автоматически “откатаны” обратно.
Имеется возможность установки режима AUTOCOMMIT автоматически
при регистрации. Если сеанс пользователя завершается аварийно, например ,
произошел сбой системы или выполнена перезагрузка пользователя, то
текущая транзакция выполнит автоматический откат изменений. Это – одна
из возможностей управления выполнением диалоговой обработки запросов
путем разделения команд на большое количество различных транзакций.
Одиночная транзакция не должна содержать слишком много несвязанных
команд , на практике она часто состоит из единственной команды. Хорошее
правило, которому можно следовать – это создавать транзакции из одной
команды или нескольких близко связанных команд .
Например , требуется удалить сведения о студенте по фамилии ‘Иванов’
из базы данных. Прежде, чем сведения из таблицы STUDENT будут удалены,