当前位置: 首页 > 知识库问答 >
问题:

错误:关系“relation\u name”的“column\u name”列中的null值违反了非null约束

羊舌阎宝
2023-03-14

我有这张桌子:

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;

玩家任务表如下所示:

我们可以看到,并非所有任务都相互依赖,因此可能存在空值。

我收到以下错误:

错误:关系“depends”的“id\u mission\u 2”列中的null值违反了非null约束

失败的行包含(14, null)。

我怎样才能解决这个问题?

数据库:PostgreSQL

共有1个答案

汪德寿
2023-03-14

主键列永远不能为null。改为使用唯一约束:

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)行!

 类似资料: