[英]SQL Server Different ways of creating table with foreign key
我需要用外键创建表。 到目前为止,我一直在这样做:
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)
...
);
您能否指出它们之间的区别?
在功能上,两者没有区别。 第一个称为内联约束(也可以用于check
约束)。
有两个小区别。 第一个是内联引用不需要constraint
关键字,因此内联引用通常不命名约束(允许使用constraint
,您可以命名引用,但这不是您显示的语法)。
第二个是外键引用只能使用一列。 对我来说,这几乎不是问题,因为我几乎总是拥有合成主键而不是合成主键。 但是,内联语法不如完整约束定义强大。
顺便说一句,还有第三种使用alter table
方法。 这类似于您的第二种方法,但是它允许在创建表之后添加约束。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.