【问题标题】:How to get ON CONFLICT IGNORE working in sqlite如何在 sqlite 中工作时遇到冲突忽略
【发布时间】:2021-12-25 21:08:12
【问题描述】:

如果标签和 url 组合已经存在,我会尝试忽略插入:

INSERT INTO tags(tag, url) VALUES (?, ?); 
              ON CONFLICT(url, tag) IGNORE 

我在(tag, url) 上有一个唯一索引

    CREATE UNIQUE INDEX tag_url ON tags (tag, url)

应用程序只是崩溃说[uncaught application error]: SqliteError - UNIQUE constraint failed: tags.tag, tags.url

【问题讨论】:

    标签: sqlite sql-insert upsert


    【解决方案1】:

    您使用 SQLite 的 UPSERT 语法不正确。

    首先,您在INSERT 语句之后和ON CONFLICT 之前有一个;,它将语句分隔为不同的语句。
    这意味着 INSERT 语句作为简单语句执行(没有 ON CONFLICT 子句有任何区别),因此您会收到 UNIQUE constraint failed 错误。

    另外,您使用的是关键字IGNORE,而不是DO NOTHING

    将您的代码更改为:

    INSERT INTO tags(tag, url) VALUES (?, ?)
    ON CONFLICT(tag, url) DO NOTHING;
    

    您可以使用INSERT OR IGNORE 语法实现相同的效果:

    INSERT OR IGNORE INTO tags(tag, url) VALUES (?, ?); 
    

    请参阅demo

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-07-09
      • 2020-12-19
      • 2021-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多