Подтвердить что ты не робот

Ограничение проверки внешнего ключа T-SQL

Когда вы создаете ограничение внешнего ключа в таблице и создаете script в MS SQL Management Studio, оно выглядит следующим образом.

ALTER TABLE T1  WITH CHECK ADD  CONSTRAINT FK_T1 FOREIGN KEY(project_id)
REFERENCES T2 (project_id)
GO
ALTER TABLE T1 CHECK CONSTRAINT FK_T1
GO

Я не понимаю, какая цель имеет второй вариант с контрольным ограничением. Не создает ли ограничение FK достаточно? Вам нужно добавить ограничение проверки, чтобы гарантировать целостность ссылки?

Другой вопрос: как он будет выглядеть тогда, когда вы напишете его прямо в определении столбца?

CREATE TABLE T1 (
my_column INT NOT NULL CONSTRAINT FK_T1 REFERENCES T2(my_column)
)

Разве этого недостаточно?

4b9b3361

Ответ 1

Сначала он создает ограничение, и здесь вы можете указать, нужно ли проверять данные allready в таблице или нет против вашего нового ограничения. WITH { CHECK | NOCHECK }

Вторая часть указывает, что ограничение включено. ALTER TABLE TableName { CHECK | NOCHECK } CONSTRAINT ConstraintName

Ответ 2

Второе утверждение вынуждено "WITH CHECK" в первом утверждении. Существует настройка, которую вы можете переключить, чтобы этого не делать.