Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции2011.doc
Скачиваний:
1
Добавлен:
01.05.2025
Размер:
1.86 Mб
Скачать

2 . Операторы commit и rollback

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

  • Оператор commit сообщает об успешном окончании транзакции. Он информирует СУБД о том, чтоб транзакция завершена, все операторы, входящие в состав транзакции, выполнены успешно и противоречия в базе данных не возникли.

  • Оператор rollback сообщает о неуспешном окончании транзакции. Он информирует СУБД о том, что пользователь не хочет завершать транзакцию; СУБД должна отменить все изменения, внесённые в базу данных в результате выполнения транзакции, т.е. СУБД возвращает базу данных в состояние, в котором она находилась до выполнения транзакции.

Р исунок 6.2 - Синтаксическая диаграмма операторов COMMIT и ROLLBAK

Операторы commit и rollback являются такими же операторами SQL, как и операторы select, insert и update.

В стандарте ANSI/ISO определена модель транзакций, а также указаны задачи операторов commit и rollback. В стандарте говорится, что транзакция автоматически начинается с выполнения пользователем или программой первого оператора SQL. Далее происходит последовательное выполнение остальных операторов SQL до тех пор, пока транзакция не завершится одним из четырех способов:

  • оператор commit завершает выполнение текущей транзакции. Изменения, внесенные в базу данных, становятся постоянными. Новая транзакция начинается непосредственно после оператора commit;

  • оператор rollback отменяет выполнение текущей транзакции. Произведенные изменения отменяются. Новая транзакция начинается непосредственно после оператора rollback;

  • успешное завершение программы (для программного SQL) считается также и успешным окончанием транзакции, как если бы был выполнен оператор rollback. Поскольку программа закончилась, новая транзакция не начинается;

  • неуспешное завершение программы (для программного SQL) считается также и неуспешным окончанием транзакции, как если бы был выполнен оператор rollback. Поскольку программа закончилась, новая транзакция не начинается.

На рис. 6.3 в графическом виде представлены типичные транзакции, иллюстрирующие четыре перечисленные ситуации. Отметим, что согласно модели транзакции в стандарте ANSI/ISO пользователь или программа могут выполнить транзакцию всегда. Чтобы начать транзакцию, не требуется выполнять никаких специальных действий; транзакция начинается автоматически вместе с первым оператором SQL или непосредственно после окончания предыдущей транзакции.

В стандарте ANSI/ISO существует понятие программное SQL, предназначенное для использования в прикладных программах. В программном SQL транзакции играют важную роль, поскольку даже в простых прикладных программах для выполнения определенной задачи часто приходится применять последовательность из двух или трех операторов SQL. В связи с тем, что пользователь может изменить принятое решение или могут возникнуть какие-либо другие обстоятельства (например, на складе отсутствует товар, который пользователь хочет заказать), прикладная программа после частичного выполнения транзакции должна иметь возможность выбора: либо выполнить транзакцию до конца, либо отменить ее. Операторы commit и rollback обеспечивают именно такую возможность.

Рисунок 6.3 - Выполненные и отмененные транзакции