Раздел ON DELETE ограничения FOREIGN KEYопределяет действия после попытки удалить строки, на которые ссылаются значения внешних ключей других таблиц. В следующей таблице описываются возможные опции раздела ON DELETE и их действие.
Опция
Действие
NO ACTION
Определяет, что если будет сделана попытка удалить строку, на которую есть ссылки из других таблиц, то возникнет ошибка, и операция удаления будет отменена.
CASCADE
Определяет, что если будет сделана попытка удалить строку, на которую есть ссылки из других таблиц, то все зависимые строки этих таблиц будут также удалены.
SET NULL
Определяет, что если будет сделана попытка удалить строку, на которую есть ссылки из других таблиц, то все значения внешних ключей в зависимых строках этих таблиц будут установлены в null. Чтобы выполнить это ограничение, все столбцы внешнего ключа целевой таблицы должны допускать null значения.
SET DEFAULT
Определяет, что если будет сделана попытка удалить строку, на которую есть ссылки из других таблиц, то все значения внешних ключей в зависимых строках этих таблиц будут установлены в их значение по умолчанию DEFAULT. Все столбцы внешнего ключа целевой таблицы должны иметь определение DEFAULT для этого ограничения. Если столбец допускает null значения, и нет никакого явного набора значений по умолчанию, то null значение неявно становится значением по умолчанию для этого столбца. Любые определенные (не null) значения, которые установлены из-за ON DELETE SET DEFAULT, должны иметь соответствующие значения в первичной таблице, чтобы поддержать ограничения внешнего ключа.
Когда Вы создаете ограничения, Вы должны определить для них значащие имена; если Вы не определяете имена для Ваших ограничений, SQL генерирует сложные имена. Имена должны быть уникальными для данного владельца объекта БД, а также следовать правилам для идентификаторов SQL Server.
Когда Вы создаете или изменяете ограничения, учитывайте следующие факты:
■ Вы можете создать, изменить, или удалить ограничения, без необходимости удаления или пересоздания таблицы.
■ Вы должны встроить логику проверки ошибок в Ваши приложения и транзакции, чтобы проверить было ли нарушено ограничение.
■ При добавлении новых ограничений FOREIGN KEY и CHECK к существующей непустой таблице Вы должны явно определить соответствующую опцию, если не хотите, чтобы SQL Server применял эти ограничения к существующим данным.
Совет.Для получения информации об ограничениях, выполняйте системные хранимые процедурыsp_helpconstraintили sp_help, или представления системного каталога, такие как check_constraints, referential_constraints, и table_constraints. Кроме того, следующие системные таблицы хранят определения ограничений: syscomments, sysreferences, и sysconstraints.