首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >SQLite插入重复密钥更新(UPSERT)

SQLite插入重复密钥更新(UPSERT)
EN

Stack Overflow用户
提问于 2010-04-27 07:10:54
回答 5查看 102.3K关注 0票数 105

MySQL有类似这样的东西:

代码语言:javascript
复制
INSERT INTO visits (ip, hits)
VALUES ('127.0.0.1', 1)
ON DUPLICATE KEY UPDATE hits = hits + 1;

据我所知,SQLite中不存在这个特性,我想知道的是,是否有任何方法可以在不执行两个查询的情况下实现相同的效果。另外,如果这是不可能的,您更喜欢什么:

  1. SELECT +(插入或更新)更新or
  2. UPDATE (+如果更新fails)

,则插入

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2018-11-01 18:23:46

Since 3.24.0 SQLite also supports upsert,所以现在您可以简单地编写以下代码

代码语言:javascript
复制
INSERT INTO visits (ip, hits)
VALUES ('127.0.0.1', 1)
ON CONFLICT(ip) DO UPDATE SET hits = hits + 1;
票数 44
EN

Stack Overflow用户

发布于 2010-04-27 10:30:42

代码语言:javascript
复制
INSERT OR IGNORE INTO visits VALUES ($ip, 0);
UPDATE visits SET hits = hits + 1 WHERE ip LIKE $ip;

这要求"ip“列具有唯一(或主键)约束。

编辑:另一个很好的解决方案:https://stackoverflow.com/a/4330694/89771

票数 121
EN

Stack Overflow用户

发布于 2010-04-27 07:21:16

我更喜欢UPDATE (+ INSERT if UPDATE fails)。更少的代码=更少的错误。

票数 19
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2717590

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档