相关疑难解决方法(0)

插入MySQL表或更新(如果存在)

我想在数据库表中添加一行,但如果存在具有相同唯一键的行,我想更新该行.

例如,

insert into table (id, name, age) values(1, "A", 19)
Run Code Online (Sandbox Code Playgroud)

假设唯一的密钥是id,在我的数据库中有一行id = 1.在这种情况下,我想用这些值更新该行.通常这会产生错误.如果我使用insert IGNORE它将忽略错误,但它仍然不会更新.

mysql sql upsert insert-update

821
推荐指数
12
解决办法
78万
查看次数

SQL Server上INSERT或UPDATE的解决方案

假设一个表结构MyTable(KEY, datafield1, datafield2...).

通常我想要更新现有记录,或者如果新记录不存在则插入新记录.

实质上:

IF (key exists)
  run update command
ELSE
  run insert command
Run Code Online (Sandbox Code Playgroud)

写这个的最佳表现方式是什么?

sql database sql-server insert upsert

564
推荐指数
11
解决办法
60万
查看次数

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万
查看次数

INSERT如果不是EXISTS ELSE UPDATE?

我找到了一些经典的"将来"的解决方案,如果它已经存在,我将如何插入新记录或更新一个记录,但我无法让它们在SQLite中工作.

我有一个表定义如下:

CREATE TABLE Book 
ID     INTEGER PRIMARY KEY AUTOINCREMENT,
Name   VARCHAR(60) UNIQUE,
TypeID INTEGER,
Level  INTEGER,
Seen   INTEGER
Run Code Online (Sandbox Code Playgroud)

我想要做的是添加一个具有唯一名称的记录.如果名称已存在,我想修改字段.

有人可以告诉我该怎么做?

sqlite insert exists

256
推荐指数
8
解决办法
39万
查看次数

在Swift中访问SQLite数据库

我正在寻找一种方法来使用Swift代码访问我的应用程序中的SQLite数据库.

我知道我可以在Objective C中使用SQLite Wrapper并使用桥接头,但我宁愿能够完全在Swift中完成这个项目.有没有办法做到这一点,如果是这样,有人可以指向我的参考,显示如何提交查询,检索行等?

sqlite swift

101
推荐指数
5
解决办法
11万
查看次数

SQLite UPSERT/UPDATE或INSERT

我需要对SQLite数据库执行UPSERT/INSERT或UPDATE.

在许多情况下,命令INSERT OR REPLACE可能很有用.但是如果你想因为外键而使你的id保持自动增量,那么它不起作用,因为它删除了行,创建了一个新行,因此这个新行有一个新的ID.

这将是表格:

播放器 - (id上的主键,user_name唯一)

|  id   | user_name |  age   |
------------------------------
|  1982 |   johnny  |  23    |
|  1983 |   steven  |  29    |
|  1984 |   pepee   |  40    |
Run Code Online (Sandbox Code Playgroud)

database sqlite upsert

92
推荐指数
6
解决办法
9万
查看次数

如果在SQL Server 2008中存在INSERT,则更新UPDATE

我想知道如何使用一个语句在SQL Server中使用UPSERT或换句话说UPDATE if records exists Else enter new record操作?

这个例子显示了在Oracle中实现这一目标的方式在这里 ,但它使用Dual表,它这不存在SQL Server.

那么,任何SQL Server替代品(没有存储过程)好吗?

sql sql-server sql-server-2008

39
推荐指数
1
解决办法
22万
查看次数

SQL:如果不存在,如何更新或插入?

我在下面有一个SQL插入,工作正常,但是我想检查DATE = xxxx,NAME = xxxx和JOB = xxx,如果它们存在则更新HOURS,否则插入新行.这可能用SQL吗?

"INSERT INTO TABLE (NAME, DATE, JOB, HOURS) VALUES ('BOB', '12/01/01', 'PM','30');
Run Code Online (Sandbox Code Playgroud)

尝试使用相同结果的下面的OR REPLACE,每次都会添加一个新行.

add_time = conn.prepareStatement("INSERT OR REPLACE INTO RESOURCE (NAME, DATE, JOB, HOURS) VALUES ('"+name+"', '" + date + "', '"+job+"','"+hours+"');");
Run Code Online (Sandbox Code Playgroud)

例如:

如果以下是在DB中,并且John想要更新他的小时数,那么它将检查名称,日期,作业是否与尝试插入的值相同以及它们是否仅仅是更新HOURS.否则,如果它们中没有一个存在(John可能有几个小时记录另一个DATE或JOB)插入一个新行.

其他人也会在下面的同一个数据库中记录他们的小时和不同的角色.

约翰| 12/12/2012 | 清洁剂| 20约翰| 12/12/2012 | 首席执行官 10吉姆| 12/10/2011 | 清洁剂| 五

sql sqlite

5
推荐指数
1
解决办法
3万
查看次数