SQLite-UPSERT*NOT*插入或替换

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允许使用重置函数

语句对象的生命周期如下所示:

  1. 使用sqlite3_PREIT_v2()创建对象
  2. 使用sqlite3_BIND_接口将值绑定到主机参数。
  3. 通过调用sqlite3_STEP()来运行SQL
  4. 使用sqlite3_Reset()重置语句,然后返回到步骤2并重复。
  5. 使用sqlite3_final()销毁语句对象。

我猜插入的更新速度比较慢,但是如何比较使用主键进行选择呢?

也许我应该使用SELECT读取第4列(BLOB 3),然后使用REPLE来编写一个新记录,将原来的第4列与前3列的新数据混合起来?


收到一只叮咚
浏览 632回答 3
3回答
打开App,查看更多内容
随时随地看视频慕课网APP