[英]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.