如何在 sqlite 中使用 ON CONFLICT IGNORE

cho*_*ovy 12 sqlite upsert sql-insert

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

INSERT INTO tags(tag, url) VALUES (?, ?); 
              ON CONFLICT(url, tag) IGNORE 
Run Code Online (Sandbox Code Playgroud)

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

    CREATE UNIQUE INDEX tag_url ON tags (tag, url)
Run Code Online (Sandbox Code Playgroud)

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

for*_*pas 23

您错误地使用了 SQLite 的UPSERT语法。

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

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

将您的代码更改为:

INSERT INTO tags(tag, url) VALUES (?, ?)
ON CONFLICT(tag, url) DO NOTHING;
Run Code Online (Sandbox Code Playgroud)

您可以使用以下语法实现相同的目的INSERT OR IGNORE

INSERT OR IGNORE INTO tags(tag, url) VALUES (?, ?); 
Run Code Online (Sandbox Code Playgroud)

请参阅演示