欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

PostgreSQL中的外鍵與主鍵操作示例

 更新時(shí)間:2025年10月10日 15:07:49   作者:騏驥1月  
在PostgreSQL中,外鍵(Foreign?Key)是一種用于建立表間關(guān)聯(lián)的數(shù)據(jù)庫約束機(jī)制,其核心作用與主鍵(Primary?Key)有顯著區(qū)別,本文給大家介紹PostgreSQL中的外鍵與主鍵操作示例,感興趣的朋友一起看看吧

什么是外鍵?

外鍵(FOREIGN KEY)用于與另一張表關(guān)聯(lián),列(或一組列)中的值必須匹配另一個(gè)表的某一行中出現(xiàn)的值,用于保持?jǐn)?shù)據(jù)的一致性。

一個(gè)外鍵約束指定一列(或一組列)中的值必須匹配出現(xiàn)在另一個(gè)表中某些行的值。我們說這維持了兩個(gè)關(guān)聯(lián)表之間的引用完整性。

在 PostgreSQL 中,外鍵(Foreign Key) 是一種用于建立表間關(guān)聯(lián)的數(shù)據(jù)庫約束機(jī)制,其核心作用與主鍵(Primary Key)有顯著區(qū)別。

一、外鍵的定義與作用

  • 定義
    • 外鍵是表中的一個(gè)或多個(gè)字段,其值必須引用另一個(gè)表(父表)的主鍵或唯一鍵。例如,訂單表中的 customer_id 字段可以是客戶表主鍵 id 的外鍵
  • 核心作用

        維護(hù)參照完整性:確保子表(外鍵所在表)的數(shù)據(jù)必須存在于父表中,避免“無效引用”。例如,訂單中的客戶 ID 必須存在于客戶表中。

        級聯(lián)操作支持:當(dāng)父表數(shù)據(jù)更新或刪除時(shí),可自動同步子表數(shù)據(jù)。例如

CREATE TABLE orders (
    id SERIAL PRIMARY KEY,
    customer_id INT REFERENCES customers(id) ON DELETE CASCADE 
);

          當(dāng)父表 customers 中的某行被刪除,子表 orders 中關(guān)聯(lián)的訂單也會被級聯(lián)刪除。

          數(shù)據(jù)關(guān)系建模:通過外鍵明確表間關(guān)聯(lián)(如一對多、多對多關(guān)系),支持復(fù)雜查詢。

二、外鍵與主鍵的區(qū)別

特性外鍵主鍵
唯一性允許重復(fù)值(只要父表存在對應(yīng)值)值必須唯一且非空
空值處理可包含 NULL(除非顯式約束為 NOT NULL)不允許 NULL
數(shù)量限制一個(gè)表可有多個(gè)外鍵一個(gè)表僅有一個(gè)主鍵
功能定位建立表間關(guān)聯(lián)唯一標(biāo)識表中的每行數(shù)據(jù)
約束類型依賴父表的主鍵或唯一鍵自身字段的唯一性和非空性

三、典型應(yīng)用場景

  1. 訂單系統(tǒng)
    訂單表通過外鍵 user_id 關(guān)聯(lián)用戶表,確保每個(gè)訂單對應(yīng)有效用戶。
  2. 多表級聯(lián)操作
    刪除用戶時(shí)自動刪除其所有訂單(通過 ON DELETE CASCADE);ON DELETE CASCADE:當(dāng)父表的行被刪除時(shí),相關(guān)的子表行也將被刪除。ON UPDATE CASCADE:當(dāng)父表的主鍵被更新時(shí),相關(guān)的子表行也將被更新。其他級聯(lián)操作如 SET NULLSET DEFAULTRESTRICT 和 NO ACTION 也是可用的。
  3. 數(shù)據(jù)冗余控制
    將重復(fù)數(shù)據(jù)(如地區(qū)信息)抽離到獨(dú)立表,通過外鍵引用減少冗余

四、外鍵的高級配置

  1. 約束行為
    • ON DELETE RESTRICT:阻止刪除父表關(guān)聯(lián)數(shù)據(jù)。
    • ON UPDATE CASCADE:父表主鍵更新時(shí)同步子表外鍵。
    • 子表(包含外鍵的表)的外鍵值必須引用父表中存在的值。如果引用了不存在的值,將引發(fā)外鍵違反錯誤
  2. 性能優(yōu)化
    外鍵字段建議創(chuàng)建索引,以加速關(guān)聯(lián)查詢。

五、總結(jié)

  • 外鍵是跨表數(shù)據(jù)一致性的“守護(hù)者”,通過引用關(guān)系確保數(shù)據(jù)有效性和級聯(lián)操作。
  • 主鍵是表內(nèi)數(shù)據(jù)的唯一標(biāo)識,強(qiáng)制唯一性和非空約束。
  • 合理使用外鍵能顯著提升數(shù)據(jù)庫設(shè)計(jì)的規(guī)范性和可維護(hù)性,但需注意級聯(lián)操作對性能的影響。

如需具體操作示例或約束語法細(xì)節(jié),可參考 PostgreSQL 官方文檔。   

到此這篇關(guān)于PostgreSQL中的外鍵與主鍵操作示例的文章就介紹到這了,更多相關(guān)PostgreSQL外鍵與主鍵內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • sqoop讀取postgresql數(shù)據(jù)庫表格導(dǎo)入到hdfs中的實(shí)現(xiàn)

    sqoop讀取postgresql數(shù)據(jù)庫表格導(dǎo)入到hdfs中的實(shí)現(xiàn)

    這篇文章主要介紹了sqoop讀取postgresql數(shù)據(jù)庫表格導(dǎo)入到hdfs中的實(shí)現(xiàn),具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • PostgreSQL的B-tree索引用法詳解

    PostgreSQL的B-tree索引用法詳解

    這篇文章主要介紹了PostgreSQL的B-tree索引用法詳解,有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • 解決postgresql表中的字段名稱包含特殊符號的問題

    解決postgresql表中的字段名稱包含特殊符號的問題

    這篇文章主要介紹了解決postgresql表中的字段名稱包含特殊符號的問題,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • Postgresql中xlog生成和清理邏輯操作

    Postgresql中xlog生成和清理邏輯操作

    這篇文章主要介紹了Postgresql中xlog生成和清理邏輯操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • PostgreSQL聚合函數(shù)的分組排序使用示例

    PostgreSQL聚合函數(shù)的分組排序使用示例

    這篇文章主要為大家介紹了PostgreSQL聚合函數(shù)的分組排序使用示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪
    2022-04-04
  • PostgreSQL 如何獲取當(dāng)前日期時(shí)間及注意事項(xiàng)

    PostgreSQL 如何獲取當(dāng)前日期時(shí)間及注意事項(xiàng)

    這篇文章主要介紹了PostgreSQL 如何獲取當(dāng)前日期時(shí)間及注意事項(xiàng),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • PostgreSQL事務(wù)回卷實(shí)戰(zhàn)案例詳析

    PostgreSQL事務(wù)回卷實(shí)戰(zhàn)案例詳析

    前段時(shí)間在公司小范圍做了一個(gè)關(guān)于PG事務(wù)實(shí)現(xiàn)的講座,最后總結(jié)了一個(gè)摘要性的東西,分享一下,這篇文章主要給大家介紹了關(guān)于PostgreSQL事務(wù)回卷實(shí)戰(zhàn)案例的相關(guān)資料,需要的朋友可以參考下
    2022-03-03
  • PostgreSQL中offset...limit分頁優(yōu)化的一些常見手段

    PostgreSQL中offset...limit分頁優(yōu)化的一些常見手段

    我們在使用數(shù)據(jù)庫進(jìn)行分頁查詢時(shí),隨著offset過濾的數(shù)據(jù)越來越多,查詢也會越來越慢,下面這篇文章主要給大家介紹了關(guān)于PostgreSQL中offset...limit分頁優(yōu)化的一些常見手段,需要的朋友可以參考下
    2023-05-05
  • PostgreSQL 字符串處理與日期處理操作

    PostgreSQL 字符串處理與日期處理操作

    這篇文章主要介紹了PostgreSQL 字符串處理與日期處理操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • postgresql 中round函數(shù)的用法說明

    postgresql 中round函數(shù)的用法說明

    這篇文章主要介紹了postgresql 中round函數(shù)的用法說明,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01

最新評論