首頁 >資料庫 >mysql教程 >為什麼 Postgres 在創建外鍵時會拋出'沒有匹配給定鍵的唯一約束”錯誤?

為什麼 Postgres 在創建外鍵時會拋出'沒有匹配給定鍵的唯一約束”錯誤?

Linda Hamilton
Linda Hamilton原創
2025-01-08 22:19:53769瀏覽

Why Does Postgres Throw a

了解 Postgres 引用完整性錯誤

在 Postgres(版本 9.1 或更高版本)中建立資料庫結構時,您可能會遇到以下錯誤:

<code>ERROR: there is no unique constraint matching given keys for referenced table "bar"</code>

此錯誤是由於 Postgres 強制執行引用完整性而引起的,引用完整性是資料庫一致性的重要方面。 讓我們來分析一下原因和解決方法。

引用完整性和外鍵

引用完整性確保相關表格之間的資料一致性。 外鍵關係在表之間建立連結。 例如,如果表bar 具有引用表foo_fk 中的name 列的外鍵foo,則引用完整性要求foo_fk 中的每個bar 值必須對應於name.foo

唯一約束的作用

為了維護參考完整性,Postgres 需要對引用列(表

中的 name)進行唯一約束。 此約束保證 foo 中的每個 name 值都是唯一的,允許 Postgres 明確標識引用的行。 foo

錯誤原因:缺少唯一約束

錯誤訊息表示外鍵引用的資料列缺少唯一約束。 如果

中的 name 列缺少唯一約束,Postgres 無法可靠地將 foo 中的 foo_fk 值連結到 bar 中的特定行,從而導致錯誤。 foo

解決錯誤:新增唯一約束

解決方案很簡單:在引用的欄位中新增唯一約束。 在 SQL 中,這是使用

ALTER TABLE 指令完成的:ADD CONSTRAINT

<code class="language-sql">ALTER TABLE foo ADD CONSTRAINT foo_name_unique UNIQUE (name);</code>
此新增強制

中的 name 列的唯一性,滿足 Postgres 對引用完整性的要求並使外鍵關係能夠正確運作。 新增約束後,嘗試建立外鍵關係應該會成功。 foo

以上是為什麼 Postgres 在創建外鍵時會拋出'沒有匹配給定鍵的唯一約束”錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn