代码之家  ›  专栏  ›  技术社区  ›  lectrician1

PostgreSQL如果值不存在,则插入值

  •  0
  • lectrician1  · 技术社区  · 7 年前

    我尝试了这段代码的多种变体,它不断给我带来SQL状态:42601错误。我查看了这些文档,并尝试使用它们的示例,这些示例有时很有效,但并不是我想要的。

    IF (SELECT guildid FROM Servers <> 1) THEN
      INSERT INTO Servers (guildid) VALUES (1)
    END IF;
    

    我的服务器表很简单。我只有一排叫Guidid的。我不想要CASE语句,因为它只输出消息。

    2 回复  |  直到 7 年前
        1
  •  1
  •   Gordon Linoff    7 年前

    如果你不必担心比赛条件(其中 if 方法建议),然后:

    INSERT INTO Servers (guildid)
       SELECT guildid
       FROM (VALUES (1)) v(guildid)
       WHERE NOT EXISTS (SELECT 1 FROM Servers s WHERE s.guildid = v.guildid);
    

    为了保护该表,我建议在其上添加一个唯一的索引。事实上,只要声明 guildid 成为主键。在这种情况下,如果尝试插入重复的值,则原始插入将失败。

        2
  •  1
  •   a_horse_with_no_name    7 年前

    如果对该列具有唯一约束,则可以使用 on conflict do nothing :

    INSERT INTO Servers (guildid) VALUES (1)
    ON CONFLICT DO NOTHING;