SQLite-UPSERT*NOT*插入或替换
http://en.wikipedia.org/wiki/Upsert
在SQLServer上插入更新存储的proc
在SQLite中是否有一些我没有想到的聪明的方法来做到这一点?
基本上,如果记录存在,我想更新四列中的三列,如果不存在,我希望为第四列插入带有默认值(Nul)值的记录。
ID是主键,因此UPSERT只有一条记录。
(我试图避免SELECT的开销,以确定是否需要明显地更新或插入)
建议?
我无法确认SQLite站点上用于表创建的语法。我没有建立一个演示来测试它,但它似乎不被支持。
如果是的话,我有三列,所以它实际上看起来是:
CREATE TABLE table1(
id INTEGER PRIMARY KEY ON CONFLICT REPLACE,
Blob1 BLOB ON CONFLICT REPLACE,
Blob2 BLOB ON CONFLICT REPLACE,
Blob3 BLOB
);
但是前两个气泡不会引起冲突,只有ID才能使我成为BLOB 1和BLOB 2(按需要)。
当绑定数据是一个完整的事务时,SQLite中的更新,这意味着要更新的每一行都需要:准备/绑定/步骤/Finish语句,而INSERT允许使用重置函数
语句对象的生命周期如下所示:
- 使用sqlite3_PREIT_v2()创建对象
- 使用sqlite3_BIND_接口将值绑定到主机参数。
- 通过调用sqlite3_STEP()来运行SQL
- 使用sqlite3_Reset()重置语句,然后返回到步骤2并重复。
- 使用sqlite3_final()销毁语句对象。
我猜插入的更新速度比较慢,但是如何比较使用主键进行选择呢?
也许我应该使用SELECT读取第4列(BLOB 3),然后使用REPLE来编写一个新记录,将原来的第4列与前3列的新数据混合起来?