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ù) |
| 約束類型 | 依賴父表的主鍵或唯一鍵 | 自身字段的唯一性和非空性 |
三、典型應用場景
- 訂單系統(tǒng)
訂單表通過外鍵user_id關聯(lián)用戶表,確保每個訂單對應有效用戶。 - 多表級聯(lián)操作
刪除用戶時自動刪除其所有訂單(通過ON DELETE CASCADE);ON DELETE CASCADE:當父表的行被刪除時,相關的子表行也將被刪除。ON UPDATE CASCADE:當父表的主鍵被更新時,相關的子表行也將被更新。其他級聯(lián)操作如SET NULL,SET DEFAULT,RESTRICT和NO ACTION也是可用的。 - 數(shù)據(jù)冗余控制
將重復數(shù)據(jù)(如地區(qū)信息)抽離到獨立表,通過外鍵引用減少冗余
四、外鍵的高級配置
- 約束行為
ON DELETE RESTRICT:阻止刪除父表關聯(lián)數(shù)據(jù)。ON UPDATE CASCADE:父表主鍵更新時同步子表外鍵。- 子表(包含外鍵的表)的外鍵值必須引用父表中存在的值。如果引用了不存在的值,將引發(fā)外鍵違反錯誤
- 性能優(yōu)化
外鍵字段建議創(chuàng)建索引,以加速關聯(lián)查詢。
五、總結
- 外鍵是跨表數(shù)據(jù)一致性的“守護者”,通過引用關系確保數(shù)據(jù)有效性和級聯(lián)操作。
- 主鍵是表內數(shù)據(jù)的唯一標識,強制唯一性和非空約束。
- 合理使用外鍵能顯著提升數(shù)據(jù)庫設計的規(guī)范性和可維護性,但需注意級聯(lián)操作對性能的影響。
如需具體操作示例或約束語法細節(jié),可參考 PostgreSQL 官方文檔。
到此這篇關于PostgreSQL中的外鍵與主鍵操作示例的文章就介紹到這了,更多相關PostgreSQL外鍵與主鍵內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
RockyLinux9.5部署PostgreSQL的實現(xiàn)步驟
本文主要介紹兩種部署方式,一直接部署在 linux 服務器上,二先安裝 docker,然后通過 docker 部署,具有一定的參考價值,感興趣的可以了解一下2025-11-11
使用postgresql 模擬批量數(shù)據(jù)插入的案例
這篇文章主要介紹了使用postgresql 模擬批量數(shù)據(jù)插入的案例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-01-01

