我需要使用外键创建表。到目前为止,我一直这样做:
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)
...
);
你能指出所有这些之间的差异吗?
答案 0 :(得分:1)
从功能上讲,两者之间没有区别。第一个称为内联约束(也可用于check
约束)。
有两个细微差别。第一个是内联引用不需要constraint
关键字,因此内联引用通常不会命名约束(constraint
是允许的,而可以命名引用,但这不是你展示的语法。
第二个是外键引用只能使用一列。对我来说,这几乎不是问题,因为我几乎总是有合成主键而不是复合主键。但是,内联语法的功能不如完整约束定义。
顺便说一下,还有第三种使用alter table
的方法。这类似于第二种方法,但它允许在创建表之后添加约束。