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

22.Транзакции

Как правило, изменения в базе данных обусловлены реальными событиями, такими, например, как увольнение сотрудника. При этом подобное событие приводит не к одному, а к нескольким изменениям в базе данных, реляционная схема которой приведена в приложении:

- закрепление всех объектов, увольняемого сотрудника за другими сотрудниками отделения;

- удаление записи сотрудника из базы данных.

Чтобы в базе данных не возникли противоречия, указанные изменения следует выполнить как одно целое. Если из-за системного сбоя или другой ошибки получится, что одна часть изменений была внесена, а другая – нет, то это нарушит целостность хранимых данных. При последующих вычислениях результаты окажутся неверными. Поэтому несколько изменений базы данных, которые вызваны одним событием, необходимо вносить по принципу “либо все, либо ничего”. Это обеспечивается средствами обработки транзакций.

Транзакцией называют несколько последовательных инструкций SQL, которые рассматриваются как единое целое. Инструкции, входящие в транзакцию, выполняют взаимосвязанные действия. Каждая инструкция решает часть общей задачи, но для того, чтобы задачу можно было считать решенной, требуется выполнить все эти инструкции.

Понятие транзакции является очень важным для программ, изменяющих содержимое базы данных, так как позволяет обеспечить ее целостность. Транзакции в реляционной СУБД подчиняются следующему правилу:

Инструкции, входящие в транзакцию, рассматриваются как неделимое целое. Либо все инструкции будут выполнены успешно, либо ни одна из них не должна быть выполнена”.

Как следует из рисунка 22, СУБД должна подчиняться этому правилу, даже если во время выполнения транзакции произойдет ошибка в программе или аппаратный сбой. В любом случае СУБД должна гарантировать, что при восстановлении базы данных после сбоя “частичное выполнение транзакции” в ней отражено не будет.

Рисунок 22 Понятие транзакции

22.1.Инструкции commit и rollback

В СУБД обработка транзакций реализована с помощью двух инструкций:

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

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

Инструкции COMMIT и ROLLBACK являются такими же инструкциями SQL, как и SELECT, INSERT или UPDATE. Однако в отличие от инструкций, изменяющих данные в базе, инструкции управления транзакциями редко употребляются в интерактивном режиме. При интерактивной обработке смысл их применения становится очевидным в контексте параллельной работы с сетевой базой данных нескольких пользователей. Вопросы обработки СУБД транзакций в многопользовательском режиме рассматриваются ниже в настоящем разделе. Здесь же следует отметить, что проверка успешности выполнения инструкций, входящих в транзакцию и выполнение отката транзакции (ROLLBACK) или подтверждение ее успешного выполнения (COMMIT) осуществляется обычно программно, посредством специально разработанных и стандартизированных интерфейсов. Программа в таком случае должна обеспечить корректную генерацию строк запросов SQL с целью дальнейшей их пересылки на выполнение СУБД. В функцию интерфейсов помимо пересылки по сети пользовательских запросов входит также обеспечение корректного соединения с базами данных на основе существующих сетевых протоколов, а также предварительная обработка запросов, включающая их грамматический разбор и “связывание” параметров в предложениях WHERE. Рассмотрение одного из таких средств разработки приложений баз данных будет рассмотрено на примере ODBC API (Open Database Connectivity Открытый доступ к базам данных, Application Programming Interface – интерфейс прикладного программирования), который в настоящее время является de facto отраслевым стандартом.