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

22.2.Модель транзакции в стандарте ansi/iso

В стандарте ANSI/ISO определена модель транзакции, а также указаны задачи инструкций COMMIT и ROLLBACK. В большинстве коммерческих СУБД (однако, не во всех) используется именно эта модель, которая была создана на основе модели, принятой в СУБД DB2. В стандарте говорится, что транзакция автоматически начинается с выполнения пользователем или программой первой инструкции SQL. Далее происходит последовательное выполнение остальных инструкций SQL до тех пор, пока транзакция не завершится одним из четырех способов:

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

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

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

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

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

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

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

Как уже указывалось, инструкции COMMIT и ROLLBACK можно использовать и в интерактивном режиме, но на практике это случается редко. Обычно интерактивный режим применяется для запросов на выборку и гораздо реже – для запросов на изменение; изменения, состоящие из нескольких инструкций, практически никогда не вводятся в интерактивном режиме. Поэтому в интерактивном режиме транзакции не играют большой роли. На самом деле во многих интерактивных СУБД (не во всех) по умолчанию установлен режим “автоматического завершения”, при котором инструкция COMMIT автоматически выполняется после каждой инструкции SQL, вводимой пользователем. В результате каждая интерактивная инструкция SQL становится отдельной транзакцией. В СУБД ORACLE при работе в интерактивном режиме после ввода последовательно нескольких инструкций по изменению содержимого базы данных необходимо указывать инструкцию COMMIT, иначе произведенные изменения будут зафиксированы только в журнале транзакций, т.е. они не будут иметь “постоянного” характера, так как данные таблиц останутся без изменений.