Http://en.wikipedia.org/wiki/upsert
在 SQLite 中是否有一些我没有想到的聪明的方法来实现这一点?
基本上,如果记录存在,我想更新四列中的三列, 如果它不存在,我想插入第四列的默认(NUL)值的记录。
ID 是一个主键,因此对 UPSERT 只有一条记录。
(我试图避免 SELECT 的开销,以确定是否需要更新或插入明显)
有什么建议吗?
我无法确认 SQLite 站点上的 TABLE CREATE 语法。 我还没有建立一个演示来测试它,但它似乎不支持。
如果是的话,我有三个专栏,所以它看起来应该是这样的:
CREATE TABLE table1(
id INTEGER PRIMARY KEY ON CONFLICT REPLACE,
Blob1 BLOB ON CONFLICT REPLACE,
Blob2 BLOB ON CONFLICT REPLACE,
Blob3 BLOB
);
但是前两个斑点不会引起冲突,只有 ID 会引起冲突 因此,我假设 Blob1和 Blob2不会被替换(如所愿)
当绑定数据是一个完整的事务时,SQLite 中的 UPDATE 意味着 要更新的每个发送行都需要: 准备/绑定/步骤/Finalize 语句 与 INSERT 不同,INSERT 允许使用复位函数
语句对象的生命周期是这样的:
我猜测 UPDATE 与 INSERT 相比是慢的,但是它与使用主键的 SELECT 相比如何呢?
也许我应该使用 select 来读取第4列(Blob3) ,然后使用 REPLACE 来编写一个新记录,将原始的第4列与前3列的新数据混合在一起?