首页 > 解决方案 > SQLite ON CONFLICT 无法用于 v3.8.11.1(默认情况下与 ubuntu 一起提供)

问题描述

选择 sqlite_version();
INSERT INTO users (uuid, test_field) VALUES ('uuid1', '1.0);
插入用户 (uuid) 值 ('uuid1') ON CONFLICT(uuid) DO UPDATE SET test_field = '1.1';

以上结果:
3.8.11.1
OK
ERROR: near "ON": 语法错误

为什么它无法识别 ON CONFLICT 的 ON 字

标签: sqlite

解决方案


us ofON CONFLICT是所谓的 UPSERT,仅在 SQLite 3.24.0 中引入。

按照 :-

UPSERT 是对 INSERT 的一种特殊语法,如果 INSERT 违反唯一性约束,它会导致 INSERT 表现为 UPDATE 或无操作。UPSERT 不是标准 SQL。SQLite 中的 UPSERT 遵循 PostgreSQL 建立的语法。UPSERT 语法已添加到 SQLite 版本 3.24.0 (2018-06-04)。

SQLite 理解的 SQL - upsert

因此,它不能在 SQLite 3.8.11.1 中使用,因此在ON附近出现语法错误,因为它不是该上下文中可识别的关键字。


推荐阅读