Sqlite 仅当id不存在时插入

Sqlite 仅当id不存在时插入,sqlite,Sqlite,好的,我们有一个phonegap应用程序,它的表格设置如下 tblTest实现的整数主键,id整数,名称文本 实施id是设备的唯一id,该id保存在服务器端数据库中。我们遇到了Web服务返回重复记录的问题,当我们修复时,我想在sql中添加一些东西,以防止添加重复记录。修复坏数据是一件痛苦的事情 我们当前的insert语句的设置如下 在tblTest id中插入名称值101“Bob” 如果运行两次,数据库最终将看起来像 actualid | id| name 1 | 101| B

好的,我们有一个phonegap应用程序,它的表格设置如下

tblTest实现的整数主键,id整数,名称文本

实施id是设备的唯一id,该id保存在服务器端数据库中。我们遇到了Web服务返回重复记录的问题,当我们修复时,我想在sql中添加一些东西,以防止添加重复记录。修复坏数据是一件痛苦的事情

我们当前的insert语句的设置如下

在tblTest id中插入名称值101“Bob”

如果运行两次,数据库最终将看起来像

actualid |  id| name
       1 | 101|  Bob
       2 | 101|  Bob
我想让它看起来像是

actualid |  id| name
       1 | 101|  Bob
Insert或Replace将在示例中为我提供一个实现2,我发现任何使用where子句的示例都是这样设置的

插入到tblTest SELECT。。。。。在哪里


这不起作用,因为表中还没有任何数据,除非我犯了一个新手错误,否则我不太擅长sqlite或通用sql。

您可能想尝试以下方法:

 INSERT INTO tblTest 
      (id, name)
      SELECT 101 as id, 'Bob' as name
        FROM tblTest
       WHERE NOT EXISTS(SELECT * FROM tblTest WHERE id = 101 and name = 'Bob')
使用:


这要求id列上有一个唯一的索引,您已经有了该索引。

该索引不会正确地复制存在的记录,但新记录会导致它进行多个插入。这可能是因为我不在乎名称是否仅与“id”重复。implementad是设备的自动递增主键,id是从服务器获取的非唯一键。事后看来,我们应该让id独一无二,但它不是。。。创建表后,我是否可以使用pragma使列唯一?在tblTestid上创建唯一索引indexname;若你们在id上有一个非唯一的索引,去掉它的weet,我不知道你们可以通过索引强制唯一性。它正在我制作的测试数据库上工作,因此我将实现此修复程序,而不是手动获取所有ID并检查它们!。由于目前的解决方案似乎涉及创建id唯一的新表、移动所有内容、删除旧表和重命名新表,同时确保在他们尝试对数据库执行任何操作之前,在设备上只执行一次,并且只执行一次。。。不是当前对我们有效的解决方案,我将添加代码以在插入记录之前手动检查数据库。事后诸葛亮,下一次我将确保在将某些内容同步到服务器时,实现是自动递增的,并且id是唯一的。
INSERT OR IGNORE INTO tblTest (id, name) VALUES (101, 'Bob')