最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

什么是外鍵?

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

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

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

一、外鍵的定義與作用

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

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

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

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

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

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

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

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

三、典型應用場景

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

四、外鍵的高級配置

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

五、總結

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

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

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

相關文章

  • PostgreSQL日期時間字段類型選擇指南

    PostgreSQL日期時間字段類型選擇指南

    這段文章詳細介紹了在PostgreSQL中選擇合適的日期時間數(shù)據(jù)類型的方法,特別推薦使用timestampwithouttimezone類型來存儲精確到微秒的日期和時間,文章對比了多種日期時間數(shù)據(jù)類型的特點和適用場景,并并并強調了避免使用varchar等存儲日期時間的重要性
    2026-06-06
  • PostgreSQL教程(十六):系統(tǒng)視圖詳解

    PostgreSQL教程(十六):系統(tǒng)視圖詳解

    這篇文章主要介紹了PostgreSQL教程(十六):系統(tǒng)視圖詳解,本文講解了pg_tables、pg_indexes、pg_views、pg_user、pg_roles、pg_rules、pg_settings等視圖的作用和字段含義等內容,需要的朋友可以參考下
    2015-05-05
  • PostgreSQL自動更新時間戳實例代碼

    PostgreSQL自動更新時間戳實例代碼

    最近有這么一個工程,需要使用postgresql數(shù)據(jù)庫,在數(shù)據(jù)庫中的好幾個表中都需要時間戳這個字段,這篇文章主要給大家介紹了關于PostgreSQL自動更新時間戳的相關資料,需要的朋友可以參考下
    2021-11-11
  • pgsql 變量賦值方法及注意事項

    pgsql 變量賦值方法及注意事項

    這篇文章主要介紹了pgsql 變量賦值方法及注意事項,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • PostgreSQL行轉列的多種方法

    PostgreSQL行轉列的多種方法

    這篇文章主要介紹了PostgreSQL行轉列的多種方法,本文給大家分享三種方法,每種方法結合示例代碼給大家介紹的非常詳細,需要的朋友可以參考下
    2023-10-10
  • 在postgresql中通過命令行執(zhí)行sql文件

    在postgresql中通過命令行執(zhí)行sql文件

    這篇文章主要介紹了在postgresql中通過命令行執(zhí)行sql文件,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • 使用postgresql獲取當前或某一時間段的年月日

    使用postgresql獲取當前或某一時間段的年月日

    這篇文章主要給大家介紹了關于使用postgresql獲取當前或某一時間段的年月日的相關資料,在PostgreSQL中可以使用函數(shù) NOW() 來查詢當前時間,文中通過代碼示例介紹的非常詳細,需要的朋友可以參考下
    2023-07-07
  • RockyLinux9.5部署PostgreSQL的實現(xiàn)步驟

    RockyLinux9.5部署PostgreSQL的實現(xiàn)步驟

    本文主要介紹兩種部署方式,一直接部署在 linux 服務器上,二先安裝 docker,然后通過 docker 部署,具有一定的參考價值,感興趣的可以了解一下
    2025-11-11
  • postgresql 修改列類型操作

    postgresql 修改列類型操作

    這篇文章主要介紹了postgresql 修改列類型操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • 使用postgresql 模擬批量數(shù)據(jù)插入的案例

    使用postgresql 模擬批量數(shù)據(jù)插入的案例

    這篇文章主要介紹了使用postgresql 模擬批量數(shù)據(jù)插入的案例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01

最新評論

阿拉善盟| 西盟| 古丈县| 新野县| 新平| 武宣县| 乌恰县| 文安县| 盐城市| 吴川市| 双峰县| 乌拉特后旗| 嘉祥县| 阿坝县| 六盘水市| 米林县| 潞西市| 江达县| 西充县| 河源市| SHOW| 垣曲县| 曲麻莱县| 苗栗市| 富民县| 普陀区| 彭阳县| 灵丘县| 达拉特旗| 固原市| 镶黄旗| 斗六市| 兰西县| 贵德县| 上思县| 康平县| 宁阳县| 永兴县| 酉阳| 广丰县| 普宁市|