Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Управл_данными / 16-транзакции

.pdf
Скачиваний:
17
Добавлен:
03.06.2015
Размер:
1.09 Mб
Скачать

Управление данными

SQL Транзакции, Курсоры

Зудилин А.Э. 2013

Что такое транзакция

Обработка транзакций обеспечивает сохранение целостности базы данных за счет того, что пакеты операций SQL выполняются полностью или не выполняются вовсе.

2

Пример

Реляционные базы данных организованы таким образом, что информация в них хранится во многих таблицах.

Таблица Orders, — Заказы . Заказы хранятся в двух таблицах, в таблице Orderltems хранится информация об отдельных предметах заказов.

Эти две таблицы связаны между собой.

Кроме того, эти две таблицы связаны и с другими таблицами, содержащими информацию о клиентах и продуктах.

3

Добавление нового заказа

Процесс добавления нового заказа состоит в выполнении следующих этапов:

1)Проверка, содержится ли информация о клиенте в базе данных. Если нет, такая информация добавляется.

2)Выборка идентификатора клиента.

3)Добавление строки в таблицу Orders, связывающую ее (строку) с идентификатором клиента.

4)Выборка идентификатора нового заказа, присвоенного ему в таблице Orders.

5)Добавление одной строки в таблицу Orderltems для каждого заказанного предмета, соотнесение его с таблицей Orders посредством выбранного идентификатора (и с таблицей Products посредством идентификатора продукта).

4

Ошибка при добавлении заказа

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

Что случится с данными?

Хорошо, если ошибка произойдет после добавления информации о клиенте в таблицу, но до того как она будет добавлена в таблицу Orders

— в этом случае проблем не будет.

При повторном выполнении последовательности добавленная запись о клиенте будет возвращена и использована. Вы сможете легко продолжить работу с того места, на котором остановились.

Но что если ошибка произойдет после того, как была добавлена строка

втаблицу Orders, но до того, как будут добавлены строки в таблицу Orderltems? Теперь в вашей базе данных будет присутствовать пустой заказ.

Еще хуже если система ошибка возникнет в процессе добавления строк

втаблицу Orderltems?

В таком случае в вашу базу данных заказ будет внесен лишь частично, и вы даже не будете знать об этом.

5

Транзакционная организация обработки данных

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

Обработка транзакций — это механизм, используемый для управления наборами операций SQL, которые должны быть выполнены в пакете, т.е. таким образом, чтобы в базу данных не могли попасть результаты частичного выполнения этого пакета операций.

6

При обработке транзакций вы можете быть уверенными в том, что выполнение набора операций не было прервано на середине — они или были выполнены все, или не была выполнена ни одна из них (если только не было явно указано иное).

Если ошибки не произошло, результаты работы всего набора операторов фиксируются (записываются) в таблицах базы данных.

Если произошла ошибка, должна быть выполнена отмена (аннулирование) всех операций, чтобы возвратить базу данных в известное и безопасное состояние.

7

Если вернуться к нашему примеру, то вот как должен на самом деле выполняться процесс:

1)Проверка, содержится ли информация о клиенте в базе данных. Если нет, такая информация добавляется.

2)Если во время добавления строки в таблицу Client происходит ошибка, транзакция отменяется.

3)Фиксация информации о клиенте (commit).

4)Выборка идентификатора клиента.

5)Добавление строки в таблицу Orders.

6)Если во время добавления строки в таблицу Orders происходит ошибка, операция отменяется.

7)Выборка идентификатора нового заказа, присвоенного ему в таблице Orders

8)Добавление одной строки в таблицу Orderltems для каждого заказанного предмета.

9)Если в процессе добавления строк в таблицу Order Items происходит ошибка, добавление всех строк в таблицу Orderltems отменяется.

10)Если ошибок нет – результаты всех операций фиксируются.

8

Термины

Транзакция (Transaction). Блок операторов SQL.

Отмена (Rollback). Процесс аннулирования указанных операторов SQL (такой процесс иногда называют “откат транзакции” или просто “откат ”).

Фиксация (Commit). Запись несохраненных операторов SQL в таблицы базы данных.

Точка сохранения (Savepoint). Временное состояние в ходе выполнения транзакции, в которое можно вернуться после отмены части операций пакета (в отличие от отмены всей транзакции). Иногда это состояние называют "точка отката".

9

Обработка транзакций используется в ходе управления действием операторов INSERT, UPDATE И DELETE.

Вы не можете отменить действие оператора SELECT. (В выполнении такой отмены вообще нет смысла.)

Вы не можете отменить операции CREATE или DROP. Эти операторы можно использовать в блоке операторов транзакции, но если вам понадобится выполнить отмену (откат), действие этих операторов аннулировано не будет.

10

Соседние файлы в папке Управл_данными