MySQL有如下功能:

INSERT INTO visits (ip, hits)
VALUES ('127.0.0.1', 1)
ON DUPLICATE KEY UPDATE hits = hits + 1;

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

  1. SELECT + (INSERT or UPDATE)
  2. UPDATE (+ INSERT if UPDATE fails)

推荐答案

Since 3.24.0 SQLite also supports upsert,现在你可以简单地写下

INSERT INTO visits (ip, hits)
VALUES ('127.0.0.1', 1)
ON CONFLICT(ip) DO UPDATE SET hits = hits + 1;

Mysql相关问答推荐

如何根据mysql中的用户组获取文档?

对象NotExecutabletry 在远程SQL服务器上执行SQL时出错,并使用SQLAchemy.Create_engine

如何有效地计算共同的朋友/追随者?

为什么IN子句中有GROUP BY会导致查询变得不可执行?

MySQL生成的整型计算可以为空吗?

MySQL RDS ALTER TABLE ENUM短暂中断了我的数据库连接

如果我有USER列,如何将SQL CREATE TABLE与PostgreSQL和MySQL一起使用?

多列分组并进行求和

使用mysql查询获取不关注user1的user3

使用 SELECT 时应锁定多少行 .. FOR UPDATE LIMIT 1

MySQL 可以用于将列表排序为三分之三吗?

需要按总金额检索前 3 个供应商,每个类别 - 子类别

获取 MySQL 中每一行之间负差的总和

SQL从字典中的键获取值

错误 1396 (HY000): 'user'@'localhost' 的操作 DROP USER 失败

MySQL Workbench 无法加载 mysql.proc

MySQL Partitioning / Sharding / Splitting - 走哪条路?

在 MySQL 中找不到 outfile 创建的文件

MYSQL_ROOT_PASSWORD 已设置但在 docker 容器中获取用户'root'@'localhost'的访问被拒绝(使用密码:YES)

MySQL - 我如何输入 NULL?