sqlite - 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 字
解决方案
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 3.8.11.1 中使用,因此在ON附近出现语法错误,因为它不是该上下文中可识别的关键字。
推荐阅读
- c# - 将 Excel 转换为 CSV 并忽略 C# 中的空单元格和 DropDownList
- c# - 将根元素添加到 XML log4net
- javascript - React 上下文提供程序是否未安装在子组件之前?
- javascript - 使用对象属性的对象数组
- scikit-learn - TfidfVectorizer 如何计算测试数据的分数
- python - Python 仍然抛出异常,我已明确排除
- php - Laravel 无法处理队列模型,但能够处理没有队列的代码
- google-cloud-platform - 从云外部使用 Hadoop 客户端访问 GCS
- javascript - Angular 6 - 材料表 - 获取选定的行值
- xml - 为什么在使用 serde-xml-rs 反序列化 XML 时出现错误“缺少字段”,即使该元素存在?