2010-05-28 117 views
18

当您在表中创建外键约束并且在MS SQL Management Studio中创建脚本时,它看起来像这样。T-SQL外键检查约束

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) 
) 

这不够吗?

回答

8

首先它创建约束,在这里您可以指定是否应该检查表中的数据是否应该针对您的新约束进行检查。 WITH { CHECK | NOCHECK }

第二部分指定启用约束。 ALTER TABLE TableName { CHECK | NOCHECK } CONSTRAINT ConstraintName

+5

确定..它不会默认启用?因为在我看来,如果我在创建表时写入约束,它应该默认启用。 – 2010-05-28 08:19:45

+0

我想为你的第二个问题得到答案,我读到的所有文档都说fk约束将在默认情况下强制执行现有列中的规则,所以我相信第二个语句是不必要的。 – Ernesto 2011-06-21 13:26:54

3

第二条语句是第一条语句中的“WITH CHECK”所强制的。有一个设置可以切换到不执行此操作。