2013-04-14 31 views
0

我有一个关于完整性约束问题完整性约束

是什么这两个请求之间的区别:

Create table t1 (c1 foreign key references t2(c2), ...) 

Create table t1 (c1 references t2(c2), ...) 

回答

4

没有区别;他们都会创建一个FOREIGN KEY约束。作为结果的底层元数据是相同的,并且在为每个表编写脚本时,SQL Server将生成一个CREATE TABLE脚本,其中包含用于添加约束的单独的ALTER TABLE ... ADD FOREIGN KEY语句。

第一种形式是首选,因为它是明确的;当你说FOREIGN KEY你知道这将是一个FOREIGN KEY;当你不知道的时候,对于那些不了解DDL语法的所有细节和可选元素的人来说,这可能是不明确的。

注意,在这两种情况下,他们将创造一个系统命名为FOREIGN KEY约束(例如FK__t1__c1__35BCFE0AFK__t1__c1__37A5467C - 不必要的神秘仅仅是为了防止与其他约束名称冲突)。最佳做法建议您应明确指定您的约束,例如

CREATE TABLE dbo.t1 
(
    c1 ..., 
    CONSTRAINT fk_t1_t2 FOREIGN KEY(c1) REFERENCES dbo.t2(c2) 
); 
+0

+1为**显式命名**!我只是想为此写一个评论。另外:列'c1'也需要一个**数据类型**才能生效..... –

+0

@marc_s是的我把它当作'...' –