Галерея
7757 8119 8300 8698 8817 9504 9722 9937
Интересные записи
Новое на сайте
Топовые новости
Новое

Ограничения ссылочной целостности

Ограничения ссылочной целостностиВ стандарте SQL:2003 определено необязательное предложение. Его можно включать в ограничения FOREIGN KEY и REFERENCE, в которых определяются действия, выполняемые при удалении строки родительской таблицы или внесении в нее изменений. Синтаксис этого предложения следующий. NO ACTION. Никакие действия не выполняются. Режим, предусмотренный по умолчанию. Если пользователь попытается удалить строку (или изменить значение первичного ключа), на которую ссылается другая таблица, будет сгенерирована ошибка. CASCADE. Изменения, выполненные в родительской таблице, отражаются на внешнем ключе, на нее ссылающемся. Таким образом, при удалении строки родительской таблицы, в дочерних таблицах будут также удалены все строки, ссылающиеся на удаленную. Если обновляется первичный ключ родительской таблицы, соответствующим образом будут изменены и значения внешних ключей, на него указывающих. SET NULL. Если удаляется строка родительской таблицы или изменяется ее первичный ключ, значения внешних ключей дочерних таблиц, на нее ссылающиеся, будут установлены в NULL. SET DEFAULT. Аналогично SET NULL, однако значения внешних ключей дочерних столбцов изменяются не на NULL, а на значение, принятое по умолчанию. RESTRICT. Этот режим во многом сходен с NO ACTION. Если в дочерней таблице существует значение, ссылающееся на удаляемое или изменяемое в родительской, генерируется исключение ссылочной целостности. Однако существует и отличие. Дело в том, что проверка NO ACTION выполнятся “в конце” инструкции SQL, так что требования ссылочной целостности могут быть временно нарушены. Проверка RESTRICT выполняется “по ходу” обработки инструкции, что исключает любые, даже временные нарушения ссылочной целостности. В СУБД всех трех крупнейших производителей в той или иной мере реализован стандарт Во всех трех реализациях по умолчанию принят вариант NO ACTION. В следующих примерах продемонстрировано отличие параметра NO ACTION от CASCADE и использован синтаксис Oracle 11g. В листинге 4.1 используются предварительно созданные таблицы SALESMAN и ADDRESS с действием по умолчанию (NO ACTION) в ограничении ссылочной целостности FK_ADDR_SALESMAN.