当前位置: 首页 > 面试题库 >

SQLite中的UPSERT

湛宝
2023-03-14
问题内容

我不想使用REPLACE INTO它,因为它基本上是a DELETEINSERT并且使用旧列中的数据很复杂。

INSERT OR IGNORE 有点骇人听闻,因为所有错误都会被忽略,因此这不是一种选择。

我已经阅读了一篇使用以下内容的博客文章

UPDATE Table1 SET (...) WHERE Column1='SomeValue'
IF @@ROWCOUNT=0
    INSERT INTO Table1 VALUES (...)

我喜欢这种方法真的很多,但我不知道我怎样才能实现这个IF-clause@@ROWCOUNT在SQLite的,这是我得到了什么:

SELECT CASE (SELECT
    CASE
        WHEN EXISTS(SELECT 1 FROM t WHERE id=2)
            THEN 1
            ELSE 0
    END)
WHEN 1
  UPDATE t set a='pdf' WHERE id=2;
ELSE
  INSERT INTO t (a) VALUES ('pdf');
END

SELECT CASE似乎是使用的唯一方法CASE- clause在SQLite的,因为一切抛出一个语法错误。但是在中也不能使用UPDATE-或-INSERT语句SELECT CASE,因此会引发错误。

我尝试了以下

UPDATE t set a='pdf' WHERE id=2;
CASE WHEN (changes()=0) THEN
    INSERT INTO t (a) VALUES ('pdf');
END

但这不起作用,因为CASE-clause抛出语法错误。

有人可以提供@@ROWCOUNT在SQLite中使用UPSERT的示例吗?


问题答案:

SQLite没有内置的类似UPSERT的语句,该语句不会删除旧记录。

您应该检查程序中的更改数量,并有条件地执行INSERT。

但是,如果您真的想在SQL中执行此操作,则可以这样做。但是您必须使用INSERT ... SELECT ...表格,以便在需要时可以插入零条记录:

BEGIN;
UPDATE t SET a = 'pdf' WHERE id = 2;
INSERT INTO t(id, a) SELECT 2, 'pdf' WHERE changes() = 0;
COMMIT;


 类似资料:
  • 问题内容: 如果我在SQLite中执行标准查询: 我按预期在表中获得了所有记录。如果我执行以下查询: 我得到了所有记录,所有记录中最右边的列都保持为“ 1”。但是,如果我执行查询: 我只有一行(最右边的列是正确的计数)。为什么会有这样的结果?我的SQL不太好,也许这种行为是预期的吗?对我来说,这似乎很奇怪而且不合逻辑:(。 问题答案: 不是您想要的,并且它不是真正有效的SQL,您必须按非汇总的所有

  • SQLite是一种基于模式的轻量级关系数据库引擎。 它是用于Web浏览器中本地存储的嵌入式数据库软件的流行选择。 与许多其他数据库管理系统不同,SQLite不是客户端 - 服务器数据库引擎。 有关更多信息,请阅读我们的 SQLite教程 在本章中,您将学习如何使用CoffeeScript与SQLite数据库进行通信。 安装 (Installation) 可以使用node-sqlite3模块将SQL

  • 问题内容: 创建一个名为“ sqlite_autoindex_mytable_1”的索引。我在“ SQlite Expert”中看到了它。在“要索引的字段”框中,它同时显示col1和col2。 在这篇文章中:https : //dba.stackexchange.com/a/14260 它说如果我想在没有col1的JOIN查询中使用col2,则必须为col2创建单独的索引。 因此,我需要添加: 如

  • 我有两个结构相同的表,我想使用另一个表的数据更新一个表,匹配主键。SQLite有一个with(CTE)语句,但以下语句不起作用(sqlite3 v.3.29.0): 我尝试过使用“选择main.ID作为ID,选择temp.Desc作为Desc”,但得到了相同的错误消息。

  • 本文向大家介绍iOS中SQLite的操作方法,包括了iOS中SQLite的操作方法的使用技巧和注意事项,需要的朋友参考一下 今天终于花了点时间把之前项目中使用到的对SQLite操作的方法整理一下并上传到github上,下载地址:(https://github.com/peanutNote/QYSQLiteManagerDemo.git)。 与其他第三方目的一样,主要是为了使代码中有关对SQLite

  • 本文向大家介绍iOS中sqlite的详细用法,包括了iOS中sqlite的详细用法的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了ios中sqlite的具体操作方法,供大家参考,具体内容如下 以上就是本文的全部内容,希望对大家的学习有所帮助。