Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
subd.doc
Скачиваний:
573
Добавлен:
22.03.2016
Размер:
1 Мб
Скачать
☆

Лабораторная работа № 8 Транзакции

Теоретические сведения

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

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

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

Таблицы ISAM, MyISAMиHEAPне поддерживают транзакции. В настоящий момент их поддержка осуществляется только в таблицахBDBиInnoDB.

Транзакции позволяют объединять операторы в группу и гарантировать, что все операторы группы будут выполнены успешно. Если часть транзакции выполняется со сбоем, результаты выполнения всех операторов транзакции до места сбоя отменяются, приводя БД к виду, в котором она была до выполнения транзакции.

По умолчанию MySQL работает в режиме автоматического завершения транзакций, т. е. как только выполняется оператор обновления данных, который модифицирует таблицу, изменения тут же сохраняются на диске. Чтобы объединить операторы в транзакцию, следует отключить этот режим: set AUTOCOMMIT=0;

После отключения режима для завершения транзакции необходимо ввести оператор COMMIT, для отката –ROLLBACK.

Включить режим автоматического завершения транзакций для отдельной последовательности операторов можно оператором START TRANSACTION.

Для таблиц InnoDBесть операторыsavepointиrollback to savepoint, которые позволяют работать с именованными точками начала транзакции.

Оператор savepointустанавливает именованную точку начала транзакции с именемpoint1. Операторrollback to savepointpoint1откатывает транзакцию к состоянию, в котором находилась БД на момент установки именованной точки. Все точки сохранения транзакций удаляются, если выполняются операторыcommitилиrollbackбез указания имени точки сохранения.

Практическая работа

При выполнении лабораторной работы необходимо:

  • создать транзакцию, произвести ее откат и фиксацию;

  • составить отчет по лабораторной работе.

Пример выполнения работы

Для выполнения задания объединим несколько операций по добавлению в таблицу catalogsновых каталогов, а затем произведем откат транзакции, т. е. отмену произведенных действий. Отключаем режим автоматического завершения, добавляем новые записи и проверяем, добавились записи или нет.

Откатываем транзакцию оператором ROLLBACK(изменения не сохранились).

Воспроизведем транзакцию и сохраним действия оператором COMMIT.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]