簡體   English   中英

在PostgreSQL中,外鍵約束只需要REFERENCES嗎?

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM