SQL Server使用外键创建表的不同方法

时间:2017-12-25 14:54:14

标签: sql sql-server foreign-keys

我需要使用外键创建表。到目前为止,我一直这样做:

CREATE TABLE books 
(
   book_id NVARCHAR(15) NOT NULL UNIQUE,
   author_id INT REFERENCES authors(author_id)
   ... 
);

但我的大学教授给我发了示范脚本,展示了处理外键的另一种方式:

CREATE TABLE books 
(
   book_id NVARCHAR(15) NOT NULL UNIQUE,
   author_id INT,

   CONSTRAINT author_FK 
       FOREIGN KEY(author_id) REFERENCES authors(author_id)
   ...
);

试图找出它们之间的区别,我做了一个研究。不幸的是我找不到答案,我发现用外键创建表的另一种方式(非常类似于第二个):

CREATE TABLE books 
(
   book_id NVARCHAR(15) NOT NULL UNIQUE,
   author_id INT,
   FOREIGN KEY(author_id) REFERENCES authors(author_id)
   ... 
);

你能指出所有这些之间的差异吗?

1 个答案:

答案 0 :(得分:1)

从功能上讲,两者之间没有区别。第一个称为内联约束(也可用于check约束)。

有两个细微差别。第一个是内联引用不需要constraint关键字,因此内联引用通常不会命名约束(constraint是允许的,而可以命名引用,但这不是你展示的语法。

第二个是外键引用只能使用一列。对我来说,这几乎不是问题,因为我几乎总是有合成主键而不是复合主键。但是,内联语法的功能不如完整约束定义。

顺便说一下,还有第三种使用alter table的方法。这类似于第二种方法,但它允许在创建表之后添加约束。