[英]In PostgreSQL does a foreign key constraint only require REFERENCES?
我正在閱讀關於PostgreSQL約束的文檔 ,因為我想看看如何定義外鍵。 在他們的例子中
CREATE TABLE orders (
order_id integer PRIMARY KEY,
product_no integer REFERENCES products (product_no),
quantity integer
);
我沒有在任何地方看到FOREIGN KEY
; 但是,在其他幾個堆棧溢出問題中(例如, 如何添加“刪除級聯”約束? )我已經看到了FOREIGN KEY
寫的。 是否有必要寫FOREIGN KEY
或是否只需要使用REFERENCES
?
評論有點長。
您主要在以下三種情況下使用foreign key
:
第四個原因也是合理的:因為本地編碼標准需要使用顯式約束。
這是一個很好的問題。
您將在與DDL約束相關的doc中的示例中注意到FOREIGN KEY
約束。 我更喜歡使用FOREIGN KEY
約束,如下面的例3所示。
你可以用不同的方式做外鍵/引用:
父表
CREATE TABLE products (
product_no integer PRIMARY KEY,
name text,
price numeric
);
兒童桌 - Ex1
內聯外鍵約束而不提及FOREIGN KEY
CREATE TABLE orders (
order_id integer PRIMARY KEY,
product_no integer REFERENCES products (product_no),
quantity integer
);
要么
兒童桌 - Ex2
請注意,父表和子表應具有相同的列名以使用此簡明表示法。
CREATE TABLE orders (
order_id integer PRIMARY KEY,
product_no integer REFERENCES products,
quantity integer
);
要么
兒童桌 - Ex3
請注意,我們在此處明確使用FOREIGN KEY
關鍵字。
CREATE TABLE orders (
order_id integer PRIMARY KEY,
product_no integer,
quantity integer,
FOREIGN KEY (product_no) REFERENCES products (product_no),
);
如果需要約束多個字段, FOREIGN KEY
約束也可以這樣寫:
CREATE TABLE t1 (
a integer PRIMARY KEY,
b integer,
c integer,
FOREIGN KEY (b, c) REFERENCES other_table (c1, c2)
);
這些示例來自文檔。
SQL小提琴示例: http ://sqlfiddle.com/#!15 / dd2d6
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.