|
Программирование >> Sql: полное руководство
в заказе с номером 113051 изменить количество товара с 4 на 10, что увеличивает стоимость заказа с $1458 до $3550. Это заказ на изделие QAS-XK47, который был принят Ларри Фитчем (идентификатор служащего 108), работающим в Лос-Анджелесе (идентификатор офиса 21). update orders set qty = 10, amount = 3550.00 where order num = 113051 update salesreps set sales = sales - 1458.00 + 3550.00 where empl num = 108 update offices set sales = sales - 1458.00 + 3550.00 where office = 21 update products set qty on hand = qty on hand +4-10 where MFR id = qas and product id = xk47 ... увы! Идентификатор производителя QSA , a не QAS ... rollback work Модель транзакции в стандарте ANSI/ISO в стандарте ANSI/ISO определена модель транзакции, а также указаны задачи инструкций commit и rollback. В большинстве коммерческих СУБД (однако не во всех) используется именно эта модель, которая была создана на основе модели, принятой в СУБД DB2. В стандарте говорится, что транзакция автоматически начинается с выполнения пользователем или программой первой инструкции SQL. Далее происходит последовательное выполнение остальных инструкций SQL до тех пор, пока транзакция не завершится одним из четырех способов: Инструкция commit завершает выполнение текущей транзакции. Изменения, внесенные в базу данных, становятся постоянными. Новая транзакция начинается непосредственно после инструкции commit. Инструкция rollback отменяет выполнение текущей транзакции Произведенные изменения отменяются. Новая транзакция начинается непосредственно после инструкции rollback. Успешное завершение профаммы (для профаммного SQL) считается также и успешным окончанием транзакции, как если бы была выполнена инструкция commit. Поскольку программа завершена, новая фанзакция не начинается Неуспешное завершение профаммы (для профаммного SQL) считается также и неуспешным окончанием фанзакции, как если бы была выполнена инсфукция rollback. Поскольку профамма завершена, новая транзакция не начинается. На рис. 12.3 в фафическом виде представлены типичные транзакции, иллюстрирующие четыре перечисленные ситуации Отметим, что, согласно модели транзакции s стандарте ANSI/ISO, пользователь или профамма могут выполнить транзакцию всегда Чтобы начать фанзакиию, не требуется предпринимать никаких специальных действий; транзакция начинается автоматически вместе с первой инструкцией SQL или непосредственно после окончания предыдущей транзакции. Непротиворечивая база данных - Транзакция < Непротиворечивая база данных- update update commit commit
Транзакция < Непротиворечивая база данных- insert delete insert I delete commit (КонецЛ програм /ы J Рис. 12.3. Выполненные и отмененные транэаю Напомним, что в стандарте ANSI/ISO существует понятие программного SQL, предназначенного для использования в прикладных программах. В программном SQL транзакции ифаюг важную роль, поскольку даже в простых прикладных профаммах для выполнения определенной задачи часто приходится применять последовательность из двух или трех инсфукций SQL. В связи с тем что пользователь может изменить принятое решение или могут возникнуть какие-либо другие обстоятельства (например, на складе отсутствует товар, который пользователь хочет заказать), прикладная профамма после частичного выполнения транзакции должна иметь возможность выбора: либо выполнить фанзакцию до конца, либо отменить ее. Инструкции commit и rollback обеспечивают именно такую возможность. Инсфукции commit и rollback можно использовать и в интерактивном режиме, но на практике это случается редко. Обычно интерактивный SQL применяется для запросов на выборку и гораздо реже - для запросов на изменение; изменения, состоящие из нескольких инсфукций, практически никогда не вводятся в итггерактивном режиме Поэтому в интерактивном режиме фанзакции не Ифают большой роли На самом деле во многих интерактивных СУБД по умолчанию установлен режим автоматического завершения , при котором инсфукция commit автоматически выполняется после каждой инсфукции SQL, вводимой пользователем В результате каждая интерактивная инсфукция SQL становится отдельной фанзакцией. другие модели транзакций в нескольких коммерческих СУБД используется модель транзакции, отличная от , ,одели ANSI/ISO и DB2, что предоставляет пользователям дополнительные возможности при выполнении транзакций. Одной из таких СУБД является Sybase, предназначенная для создания приложений, связанных с оперативной обработкой транзакций. В СУБД SQL Server, созданной на основе Sybase, используется та же модель транзакции, что и в Sybase. В Sybase применяется диалект Transact-SQL, в котором для обработки транзакций используются четыре инструкции: Инструкция begin transaction сообщает о начале транзакции В отличие от модели транзакции в стандарте ANSI/ISO, где окончание предыдущей транзакции неявно задает начало следующей, в Sybase начало транзакции задается явно с помощью данной инструкции. Инструкция commit transaction сообщает об успешном окончании транзакции. Как и в модели стандарта ANSI/ISO, все изменения, сделанные в базе данных в ходе выполнения транзакции, становятся постоянными. Однако новая транзакция не начинается автоматически. Инструкция save transaction создает внутри транзакции точку сохранения. СУБД Sybase записывает состояние базы данных в текущей точке транзакции и присваивает сохраненному состоянию имя тонки сохранения, указанное в инструкции. Инструкция rollback играет две роли. Если в ней указана точка сохранения (форма rollback то имя точки сохранения), то Sybase отменяет изменения, сделанные в базе данных после точки сохранения, возвращая транзакцию к месту, где была выполнена инструкция save transaction. Если точка сохранения не указана, то инструкция rollback отменяет все изменения, сделанные в базе данных после инструкции begin transaction. Как видно из рис. 12.4, точки сохранения особенно полезны в сложных транзакциях, состоящих из большого числа инструкций. В процессе выполнения транзакции прикладная программа, изображенная на этом рисунке, периодически сохраняет состояние базы данных, создавая две именованные точки сохранения. Если возникнут какие-либо проблемы, прикладной программе не придется отменять всю транзакцию. Вместо этого она может вернуться к любой точке сохранения и возобновить выполнение транзакции с этого места. Все инструкции, выполненные до точки -сохранения, остаются в силе, а выполненные после нее отменяются инструкцией rollback то имя точки сохранения. Следует отметить, что, как и в модели ANSI/ISO, в модели Sybase логической единицей работы является целая транзакция. Например, если во время выполнения транзакции происходит системная или аппаратная ошибка, то в базе данных отменяется целая транзакция. Таким образом, точки сохранения удобно использовать в прикладных программах, но они не являются фундаментальным отличием от модели транзакции стандарта ANSI/ISO. Тем не менее, явное использование инструкции begin transaction означает существенный отход от модели ANSI/ISO. Инструкции SQL, которые выполняются вне транзакции (т.е. не находятся между инструкциями begin transaction и commit transaction ИЛИ begin transaction И rollback), обрабатываются В режиме автозавершения . Это значит, что после выполнения каждой такой инструкции происходит автоматическое завершение транзакции; отменить успешно выполненную инструкцию невозможно.
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0.004
При копировании материалов приветствуются ссылки. |