我有這張表:
DROP TABLE IF EXISTS mission CASCADE;
CREATE TABLE mission
(
id_mission SERIAL PRIMARY KEY,
task_description VARCHAR(255) NOT NULL
);
一個任務可以依賴于另一個被解鎖。所以我有下一個自反表:
DROP TABLE IF EXISTS depends CASCADE;
CREATE TABLE depends
(
id_mission_1 INTEGER,
id_mission_2 INTEGER, -- it can be null (optional)
FOREIGN KEY (id_mission_1) REFERENCES mission (id_mission),
FOREIGN KEY (id_mission_2) REFERENCES mission (id_mission),
PRIMARY KEY (id_mission_1, id_mission_2)
);
我正在從另一個表中匯入資料,如下所示:
INSERT INTO depends(id_mission_1, id_mission_2)
SELECT quest_id, quest_depends
FROM player_quest;
該player_quest表如下所示:

我們可以看到并非所有任務都相互依賴,因此可能存在空值。
我收到以下錯誤:
錯誤:關系“depends”的“id_mission_2”列中的空值違反了非空約束
失敗的行包含 (14, null)。
我怎樣才能解決這個問題?
資料庫:PostgreSQL
uj5u.com熱心網友回復:
主鍵列永遠不能為空。改用UNIQUE約束:
CREATE TABLE depends
(
id_mission_1 INTEGER,
id_mission_2 INTEGER, -- it can be null (optional)
FOREIGN KEY (id_mission_1) REFERENCES mission (id_mission),
FOREIGN KEY (id_mission_2) REFERENCES mission (id_mission),
UNIQUE (id_mission_1, id_mission_2)
);
請注意,可以插入多個 (14, null) 行!
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/399487.html
標籤:sql PostgreSQL的
