Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шпоры по субд Крупская.doc
Скачиваний:
54
Добавлен:
15.06.2014
Размер:
1.95 Mб
Скачать

36 Правила добавления и удаления. Проблемы ссылочных циклов

удаление

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

• RESTRICT (NOACTION) – запрещаетудалениестроки из таблицы – предка, если строка имеет потомков. Инструкция DELETE, пытающаяся удалить такую строку, отбрасывается, и выдается сообщение об ошибке. В некоторых СУБД данное правило носит названиеno action. Следует также иметь в виду, что данное правило зачастую воспринимается СУБД по умолчанию и не требует явного задания.

• CASCADE — определяет, что при удалениистроки – предка все строки-потомки также автоматически удаляются из таблицы-потомка. Данное правило опасно в употреблении, в случае если в базе существуют разнообразные множественные связи.

• SET NULL – определяет, что при удалениистроки-предка внешним ключам во всех ее строках – потомках автоматически присваивается значение NULL. Таким образом, удаление строки из таблицы – предка вызывает установку значений NULL в некоторых столбцах таблицы-потомка.

• SET DEFAULT – определяет, что при удалениистроки – предка внешним ключам, всем ее строкам – потомкам присваивается определенное значение, по умолчанию установленное для данного столбца. Таким образом, удаление строки из таблицы – предка вызывает “установку значений по умолчанию” в некоторых столбцах таблицы-потомка.

обновления

. Регламентируются четыре правила обновления, аналогичные правилам удаления:

• RESTRICT – запрещает обновлениепервичного ключа в строке таблицы – предка, если у строки есть потомки. Инструкция UPDATE, пытающаяся изменить значение первичного ключа в такой строке, отменяется, и выдается сообщение об ошибке.

• CASCADE – определяет, что при изменениизначения первичного ключа в строке – предке соответствующее значение внешнего ключа в таблице – потомке также автоматически изменяется во всех строках-потомках таким образом, чтобы соответствовать новому значению первичного ключа.

• SET NULL – определяет, что при обновлениизначения первичного ключа в строке – предке внешним ключам во всех ее строках – потомках автоматически присваивается значение NULL.

• SET DEFAULT – определяет, что при обновлениизначения первичного ключа в строке – предке внешним ключам во всех ее строках – потомках по умолчанию присваивается определенное значение, установленное для данного столбца.

37 Понятие транзакций. Инструкции обработки транзакций (commit и rollback)

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

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

Инструкции COMMIT и ROLLBAск

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

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

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

Здесь же следует отметить, что проверка успешности выполнения инструкций, входящих в транзакцию и выполнение отката транзакции (ROLLBACK) или подтверждение ее успешного выполнения (COMMIT) осуществляется обычно программно, посредством специально разработанных и стандартизированных интерфейсов. Программа в таком случае должна обеспечить корректную генерацию строк запросовSQLс целью дальнейшей их пересылки на выполнение СУБД. В функцию интерфейсов помимо пересылки по сети пользовательских запросов входит также обеспечение корректного соединения с базами данных на основе существующих сетевых протоколов, а также предварительная обработка запросов, включающая их грамматический разбор и “связывание” параметров в предложенияхWHERE.