Совокупность команд SQL, результаты действия которых еще не стали постоянными, называется транзакцией или логической единицей работы. В упрощенном представлении, транзакции содержат либо команды DML, выполняющие единое согласованное изменение данных, либо одну команду DDL или DCL.
Транзакции начинаются с выполнения первой исполняемой команды SQL и заканчиваются либо фиксацией изменений в базе данных, либо отказом от фиксации (откатом). Окончанием транзакции может служить одно из следующих событий:
При выполнении команд SQL COMMIT или ROLLBACK происходит явная обработка транзакции. При этом обеспечивается согласованность данных; появляется возможность проверить изменения в данных прежде, чем сделать их постоянными; взаимосвязанные операции логически группируются.
Неявная обработка транзакций приводит к автоматической фиксации изменений или автоматическому откату.
Автоматическая фиксация изменений (COMMIT) происходит в следующих случаях:
Автоматический откат (ROLLBACK) выполняется в случае аварийного прекращения сеанса работы в SQL*Plus или отказа системы.
Состояние данных до и после завершения транзакции
Состояние данных перед выполнением команд COMMIT или ROLLBACK:
Состояние данных после выполнения команды COMMIT:
Состояние данных после выполнения команды ROLLBACK:
Синтаксис
COMMIT; |
---|
Примеры: Создание нового отдела обучения и добавление данных, по крайней мере, об одном служащем. Фиксация изменений.
Синтаксис
ROLLBACK [TO метка]; |
---|
метка |
Имя маркера, определяющего точку сохранения |
Пример: Во время удаления записи из таблицы TEST случайно стерты все данные этой таблицы. Ошибка исправляется, посылается правильная команда, и изменения фиксируются.
Откат до маркера.
С помощью команды SAVEPOINT можно создать в текущей транзакции маркеры для отката. Откат до такого маркера выполняется с помощью команды ROLLBACK TO.
Откат на уровне команды.
Если ошибка возникла при выполнении одной конкретной команды DML, отменяются только результаты этой команды. Для этого Oracle 7 использует неявную точку сохранения.
При откате на уровне команды все прочие изменения сохраняются и пользователь должен завершить транзакцию явно командой COMMIT или ROLLBACK.
![]() |
Для закрепления материала можно выполнить Практическое задание 11 |