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

Контрольные вопросы

    1. Дайте объяснение понятию «привилегия» в теории бах данных

    2. Какие виды привилегий можно установить?

    3. Объясните формат команды предоставления привилегии

    4. Объясните формат команды отмены привилегии

    5. Какое назначение параметров ALL и PUBLIC?

    6. В каких случаях используется предложение WITH GRANT OPTION?

Тема 2.6 Транзакции и управлении ими

Цель: рассмотреть понятие «транзакция», назначение транзакций; понятие «блокировка», назначение блокировок и проблемы связанные с применением блокировок

Как правило, изменения в базе данных обусловлены событиями, происходящими во "внешнем мире", такими, например, как прием нового заказа от клиента. При этом прием нового заказа приводит не к одному, а к четырем изменениям в учебной базе данных:

  • добавление нового заказа в таблицу orders;

  • обновление фактического объема продаж для служащего, принявшего заказ;

  • обновление фактического объема продаж для офиса, в котором работает данный служащий;

  • обновление количества товара, имеющегося в наличии.

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

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

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

Прием заказа Для приема заказа от клиента программа ввода заказов должна:

а) выполнить запрос к таблице products и проверить наличие товара на складе;

б) добавить заказ в таблицу orders;

в) обновить таблицу products, вычтя заказанное количество товара из количества товара, имеющегося в наличии;

г) обновить таблицу salesreps, добавив стоимость заказа к объему продаж служащего, принявшего заказ;

д) обновить таблицу offices, добавив стоимость заказа к объему продаж офиса, в котором работает данный служащий.

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

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

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

Рисунок 6.1 – Понятие транзакции в SQL