SQLite INSERT - 重复键更新 (UPSERT)

标签 sql mysql database sqlite upsert

MySQL 有这样的东西:

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

据我所知,SQLite 中不存在此功能,我想知道是否有任何方法无需执行两个查询即可达到相同的效果。另外,如果这不可能,您更喜欢什么:

  1. SELECT +(插入或更新)
  2. 更新(+ INSERT 如果更新失败)

最佳答案

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 .

关于SQLite INSERT - 重复键更新 (UPSERT),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55908770/

相关文章:

sql - 在 sql server 中搜索 LEN() 函数的替代函数以进行优化

mysql - 如果表中只有一列,则 LEFT JOIN 返回 NULL

php Mysql 插入 : can't insert anymore

mysql - Concrete5 SQLSTATE[HY000] [2002] 本地主机上没有这样的文件或目录

mysql - 使用连接进行限制 X,Y MySQL 查询运行速度更快

mysql - 值为NULL时无法添加外键约束?

mysql - 在 SQL 中生成与列中的整数一样多的行

mysql - 在 mysql 中,如何只从一个表中获取不链接到具有特定 ID 的另一个表中的任何行的行

mysql - 为什么我的`sql_calc_found_rows`比MySQL中的`count(*)`要快?

PHP PDO 模块未提交事务,未上报原因