Foreign-Key

無法在 Postgresql 的表中添加外鍵約束

  • July 17, 2015

我正在嘗試在“centresdevote”表中添加“prefectures”表的外鍵。但是我在嘗試將外鍵添加到“centresdevote”表時遇到了這個錯誤。順便說一句,將外鍵添加到我的數據庫中的其他表沒有問題,我似乎無法弄清楚為什麼這個錯誤只針對這個彈出。我正在使用 Postgresql 9.2 並手動為其他表添加了外鍵。我也嘗試使用如下 SQL 程式碼:

ALTER TABLE centresdevote 
ADD CONSTRAINT objectid 
FOREIGN KEY (objectid) REFERENCES prefectures (objectid);

這是錯誤

ERROR:  insert or update on table "centresdevote " violates foreign key constraint "objectid"
DETAIL:  Key (objectid)=(10) is not present in table "prefectures".

這是兩個表的結構:

“都道府縣”表:

objectid integer NOT NULL,
nomprefecture character varying(70),
shape st_geometry,
respcommissionrecensement character varying(70),
CONSTRAINT prefectures_pkey PRIMARY KEY (objectid)

“centresdevote”表:

objectid integer NOT NULL,
arabicname character varying(70),
frenchname character varying(70),
shape st_point,
CONSTRAINT centresdevote_pkey PRIMARY KEY (objectid)

提前致謝!

在表中centresdevote,您有一行的值為objectid10。當您嘗試創建 a時,會檢查表中的列中是否存在與 中的所有行FOREIGN KEY CONSTRAINT匹配的值。裡面沒有.objectid``prefectures``centresdevote``prefectures``objectid = 10

我建議您閱讀PostgreSQL 文件 - 5.3.5。外鍵關於外鍵的 W3Schools 頁面。外鍵的全部意義在於它們限制了您可以插入到欄位中的內容。來自 PostgreSQL 文件:

外鍵約束指定一列(或一組列)中的值必須與出現在另一個表的某行中的值匹配。我們說這維護了兩個相關表之間的引用完整性。

添加外鍵不是強制性的,您可以在沒有它的情況下進行各種查詢。

引用自:https://dba.stackexchange.com/questions/95780