簡體   English   中英

使用 REFERENCES 時,可以在 PostgreSQL 中省略 FOREIGN KEY 嗎?

[英]Can FOREIGN KEY be omitted in PostgreSQL when using REFERENCES?

我想知道這兩個 SQL 語句之間是否有任何(可能是細微的)區別:

CREATE TABLE profiles (
    profile_id SERIAL PRIMARY KEY NOT NULL,
    bio TEXT,
    user_id INTEGER NOT NULL,
    FOREIGN KEY (user_id) REFERENCES users(user_id)
);

CREATE TABLE profiles (
    profile_id SERIAL PRIMARY KEY NOT NULL,
    bio TEXT,
    user_id INTEGER NOT NULL REFERENCES users(user_id) 
);

我注意到當我用第一個符號在 Postico 中創建一個表時,但稍后查看創建的profiles表的 DDL, FOREIGN KEY被刪除,我最終得到較短的第二個符號。

使用FOREIGN KEY創建表

DDL 視圖不顯示FOREIGN KEY

所以,我想知道(並尋求確認)這兩個語句實際上是 100% 等效的,或者它們對數據庫的作用是否存在一些細微的差異。

任何指向官方資源的指針(也許還有它與 MySQL 的不同之處)將不勝感激。

您展示的兩個示例執行相同的操作,只是使用了不同的語法。

第一種方法稱為table 約束,第二個column constraint ,但后一個名稱有些誤導,因為約束也在表上。

主要區別在於列約束語法較短,但不能用於所有約束:例如,如果您有一個包含兩列的主鍵,則必須將其寫入表約束語法中。

在 PostgreSQL 中,您通過外鍵約束定義外鍵。 外鍵約束表示子表中的一列或一組列中的值與父表中的一列或一組列中的值匹配。 我們說外鍵約束維護子表和父表之間的參照完整性。

可能會更好地向您解釋,或者您可以閱讀有關外鍵的文檔

DDL 視圖不顯示外鍵

由未知第三方工具創建的 DDL 視圖不是參數。

小提琴 兩種情況下都存在外鍵。 此外,我沒有看到兩個 DDL 查詢的結果差異。

附注。 作為建議 - 始終明確指定約束名稱。 如果需要刪除怎么辦? 沒有約束名稱是有問題的......

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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