相关疑难解决方法(0)

SQLite - UPSERT*不*INSERT或REPLACE

http://en.wikipedia.org/wiki/Upsert

在SQL Server上插入更新存储过程

在SQLite中有没有一些我没想到的聪明方法?

基本上,如果记录存在,我想更新四列中的三列,如果它不存在,我想用第四列的默认(NUL)值插入记录.

ID是主键,因此UPSERT只会有一条记录.

(我试图避免SELECT的开销,以确定我是否需要更新或插入显然)

建议?


我无法在SQLite网站上确认SQL CREATE的语法.我还没有构建一个演示来测试它,但它似乎不支持..

如果是,我有三列,所以它实际上看起来像:

CREATE TABLE table1( 
    id INTEGER PRIMARY KEY ON CONFLICT REPLACE, 
    Blob1 BLOB ON CONFLICT REPLACE, 
    Blob2 BLOB ON CONFLICT REPLACE, 
    Blob3 BLOB 
);
Run Code Online (Sandbox Code Playgroud)

但是前两个blob不会引起冲突,只有ID会因此我asusme Blob1和Blob2不会被替换(根据需要)


绑定数据时SQLite中的UPDATE是一个完整的事务,这意味着每个要更新的发送行都需要:Prepare/Bind/Step/Finalize语句,与允许使用重置函数的INSERT不同

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

  1. 使用sqlite3_prepare_v2()创建对象
  2. 使用sqlite3_bind_接口将值绑定到主机参数.
  3. 通过调用sqlite3_step()运行SQL
  4. 使用sqlite3_reset()重置语句,然后返回步骤2并重复.
  5. 使用sqlite3_finalize()销毁语句对象.

更新我猜测与INSERT相比速度慢,但它与使用主键的SELECT相比如何呢?

也许我应该使用select来读取第4列(Blob3),然后使用REPLACE编写一条新记录,将原始的第4列与前3列的新数据混合在一起?

sql sqlite upsert

505
推荐指数
11
解决办法
28万
查看次数

SQLite"INSERT OR REPLACE INTO"与"UPDATE ... WHERE"

我以前从未见过INSERT OR REPLACE INTO names (id, name) VALUES (1, "John")SQL中使用的语法,我想知道它为什么比它好UPDATE names SET name = "John" WHERE id = 1.是否有任何理由使用其中一个.这种语法是否特定于SQLite?

sqlite upsert

58
推荐指数
4
解决办法
11万
查看次数

SQLite中的条件更新

我可以在这样SQLite的声明中创建吗?

update books set
(if number_of_pages > 0 then number_of_pages = number_of_pages - 1)
where book_id = 10
Run Code Online (Sandbox Code Playgroud)

这有一个有效的语法吗?

sql sqlite

7
推荐指数
2
解决办法
7602
查看次数

标签 统计

sqlite ×3

sql ×2

upsert ×2