当前,正在开发需要在服务器之间同步其数据的应用程序。该应用程序大量使用SQLite,因此我们移至原始sqlite,并决定使用FMDatabase。我们的表是非规范化的并且没有键,因为我们不管理数据状态,仅收集数据并发送数据。我们会每隔一段时间更新表(从服务器获取并插入新内容),但是将数据发送到服务器的情况更为常见。

来自服务器的数据以ID值(char类型的GUID值)的完整记录的形式出现,因此我们为表制作了PK键,使其由这些id列组成。关键是,从服务器获取数据时,我只需要插入新记录,当前,我正在使用这些id值进行插入。有些记录被插入(新),而有些则由于id列上的唯一PK约束而失败。对我来说,这非常好,只是让控制台中的消息烦人(违反了唯一键),并且不确定是否会影响性能等。我可以在插入新记录之前先遍历记录,查找现有记录并仅插入真正的新记录,但是我认为这是浪费。

另外,我可以指定显式的内部int id(对于PK索引来说更快),但是我们的表与FK不相关,因此将是多余的。有什么想法吗?

最佳答案

INSERT statement带有可选的ON CONFLICT clause,因此,如果要取消显示警告,只需使用INSERT或IGNORE,将忽略重复的PK。

08-06 04:08