Tsql T-SQL外键检查约束

Tsql T-SQL外键检查约束,tsql,foreign-keys,constraints,Tsql,Foreign Keys,Constraints,在表中创建外键约束并在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 我不明白的是,第二个alter带有check约束的目的是什么。 创建FK约束还不够吗?是否必须添加检查约束以确保引用

在表中创建外键约束并在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
我不明白的是,第二个alter带有check约束的目的是什么。 创建FK约束还不够吗?是否必须添加检查约束以确保引用完整性

另一个问题:当您直接在列定义中编写它时,它会是什么样子

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

这还不够吗?

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

首先它创建约束,在这里您可以指定是否应根据新约束检查表中的数据allready<代码>与{CHECK | NOCHECK}


第二部分指定启用约束<代码>更改表格名称{CHECK | NOCHECK}约束约束名称

确定。。默认情况下不会启用它?因为在我看来。。如果我在创建表时写入约束,则默认情况下应启用该约束。我想为您的第二个问题找到答案,我阅读的所有文档都表明,默认情况下,fk约束将在现有列中强制执行该规则,因此我认为第二条语句是不必要的。