Создание и изменение ограничений FOREGN KEY

Ограничение FOREIGN KEY можно определить при создании таблицы. Если таблица уже существует, ограничение FOREIGN KEY можно добавить, в этом случае оно присоединяется к существующим ограничениям PRIMARY KEY или UNIQUE этой или другой таблицы. Таблица может содержать несколько ограничений FOREIGN KEY.

Существующее ограничение FOREIGN KEY можно изменить или удалить. Возможно, потребуется, чтобы ограничение FOREIGN KEY ссылалось на другие столбцы. Однако длину столбца, определяющего ограничение FOREIGN KEY, изменить нельзя.

ПримечаниеПримечание

Чтобы изменить ограничение FOREIGN KEY, его необходимо удалить и повторно создать с новым определением.

Ограничение FOREIGN KEY необходимо удалить, чтобы снять требования ссылочной целостности между столбцами внешнего ключа и соответствующими столбцами первичного ключа или ограничения UNIQUE в другой таблице.

Создание ограничения FOREIGN KEY вместе с таблицей

Инструкция CREATE TABLE (Transact-SQL)

Создание ограничения FOREIGN KEY в существующей таблице

ALTER TABLE (Transact-SQL)

Как создать связь между таблицами (визуальные инструменты для баз данных)

Удаление ограничения FOREIGN KEY

ALTER TABLE (Transact-SQL)

Принудительное применение ограничения FOREIGN KEY при помощи параметра WITH NOCHECK

Когда ограничение FOREIGN KEY добавляется в существующую таблицу, компонент Database Engine проверяет данные столбцов, чтобы убедиться, что все значения, кроме NULL, существуют в соответствующих столбцах ограничения PRIMARY KEY или UNIQUE. Если указать параметр WITH NOCHECK, компонент Database Engine добавит новое ограничение, не проверяя, соответствуют ли ему данные столбца. Параметр WITH NOCHECK удобно использовать, если существующие данные столбца уже удовлетворяют новому ограничению FOREIGN KEY или бизнес-правило требует, чтобы ограничение вступало в силу только с данного момента времени.

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

Избежание проверки существующих данных при создании ограничения FOREIGN KEY

ALTER TABLE (Transact-SQL)

Отключение ограничения FOREIGN KEY

Существующие ограничения FOREIGN KEY можно при выполнении таких операций, как INSERT или UPDATE, и во время обработки репликации.

  • Инструкции INSERT и UPDATE

    Если отключить ограничение FOREIGN KEY, данные таблицы будут изменяться без проверки на соответствие ограничениям. Ограничение FOREIGN KEY можно отключить во время выполнения инструкций INSERT или UPDATE, если новые данные не удовлетворяют ограничению или оно должно распространяться только на те данные, которые содержатся в базе данных.

    ПримечаниеПримечание

    Любые каскадные действия, определенные для соответствующего первичного ключа, не будут выполняться над строками, для которых внешний ключ отключен.

  • Обработка репликации

    Отключите ограничение FOREIGN KEY во время репликации, если оно должно выполняться только в исходной базе данных. При репликации таблицы определение и данные таблицы копируются из исходной в целевую таблицу. Если не отключить ограничение FOREIGN KEY, которое должно выполняться только в исходной базе данных, во время репликации, оно может препятствовать копированию данных в целевую базу данных. Дополнительные сведения см. в разделе Управление ограничениями, идентификаторами и триггерами с помощью параметра «NOT FOR REPLICATION».

Отключение ограничения FOREIGN KEY во время выполнения инструкций INSERT и UPDATE

ALTER TABLE (Transact-SQL)

Как отключить ограничение внешнего ключа при помощи инструкций INSERT и UPDATE (визуальные инструменты для баз данных)

Отключены ограничения FOREIGN KEY во время репликации

ALTER TABLE (Transact-SQL)

Как отключить ограничения внешнего ключа для репликации (визуальные инструменты для баз данных)

Получение сведений об ограничениях FOREIGN KEY

sys.foreign_keys (Transact-SQL)

Получение сведений о столбцах, составляющих ограничение FOREIGN KEY

sys.foreign_key_columns (Transact-SQL)

См. также

Основные понятия