问题标签 [upsert]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1854 浏览

iphone - 来自 SQLite 数据库的核心数据“Upsert”

我目前正在编写一个需要能够修改和保留各种数据的应用程序。为此,我决定使用 Core Data。当用户第一次打开应用程序时,我需要从 sqlite 数据库中导入大量数据,这些数据由多对多关系组成。

我想找出将所有这些数据插入我的代码数据存储的最佳方法。现在我正在使用 NSOperation 进行导入,而应用程序的其余部分仍然处于活动状态,因此用户可以做其他事情,但我希望尽快进行导入,以便可以立即访问整个应用程序.

我现在使用的方法是使用 NSFetchRequest 尝试在数据存储中查找相关实体,如果实体存在,我只需将其添加为关系,如果实体不存在,我创建一个新实体并将其添加为关系。这行得通,但我觉得它可能甚至不接近最佳状态。

我现在使用的代码:

添加关系的方法:

0 投票
2 回答
1070 浏览

sql-server-2005 - 为什么在 MS SSIS 中批量插入阻止更新?

我有一个像这样设置的 SSIS 包:

SSIS 流程 http://www.invativa.se/Images/Support/support.PNG

如果我只运行新行流,批量插入完成没有问题,但是一旦我连接实时行流,包就会无限期地停止。当我检查活动监视器时,更新新表行任务停止,被插入新行任务阻止。

为什么批量插入没有完成?我该怎么做才能使包执行?

注意:我很清楚这可能不是最佳选择,但我真的很想得到问题的答案。谢谢!

0 投票
1 回答
2983 浏览

java - 使用 Hibernate 和 MySQL 处理 upsert 的优雅方式

我目前正在研究基于 Hibernate 和 MySQL 的批量导入功能。我的目标是为几个表提供 Upsert 功能。我发现自己编写了很多代码来处理通过键查看行是否存在并分支到正确的方法。我想知道是否有更好的方法,即类似于 SQL-Server SSIS 附带的工具,但适用于 Hibernate 和 MySQL。您使用什么工具或优雅的解决方案来处理带有 hibernate 和/或 MySQL 的批量 Upsert?

0 投票
4 回答
131116 浏览

sqlite - SQLite“插入或替换”与“更新......在哪里”

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

0 投票
1 回答
7109 浏览

sql - Oracle MERGE 不插入

我有这个简单的例子,我似乎无法开始工作:

如果表中存在“AAA”记录,则更新成功。

但如果不存在,则不插入:

关于我做错了什么的任何线索?

0 投票
2 回答
45604 浏览

sql-server - SQL Server 中单行 MERGE / upsert 的语法

我正在尝试对表进行单行插入/更新,但所有示例都是针对集合的。

谁能修复我的语法:

每个 marc_s 的分辨率是将单行转换为子查询 - 这让我认为 MERGE 命令并不是真正适用于单行 upserts。

0 投票
5 回答
14910 浏览

sql-server - SQL Server 2005 中的原子 UPSERT

在 SQL Server 2005 中执行原子“UPSERT”(如果存在则更新,否则插入)的正确模式是什么?

我在 SO 上看到了很多代码(例如,请参阅Check if a row exists, else insert)具有以下两部分模式:

或者

其中 < 条件 > 将是对自然键的评估。上述方法似乎都不能很好地处理并发。如果我不能有两行具有相同的自然键,那么上述所有风险似乎都存在在竞争条件场景中插入具有相同自然键的行的风险。

我一直在使用以下方法,但我很惊讶在人们的反应中没有看到它,所以我想知道它有什么问题:

请注意,这里提到的竞争条件与前面代码中的竞争条件不同。在较早的代码中,问题是幻读(行被另一个会话插入到 UPDATE/IF 之间或 SELECT/INSERT 之间)。在上面的代码中,竞争条件与 DELETE 有关。在(WHERE NOT EXISTS)执行之后但在 INSERT 执行之前,是否有可能由另一个会话删除匹配的行?目前尚不清楚 WHERE NOT EXISTS 在何处与 UPDATE 一起锁定任何内容。

这是原子的吗?我无法找到这将在 SQL Server 文档中记录的位置。

编辑: 我意识到这可以通过事务来完成,但我认为我需要将事务级别设置为 SERIALIZABLE 以避免幻读问题?对于这样一个常见的问题,这肯定是矫枉过正吗?

0 投票
5 回答
104695 浏览

sql - SQLite 插入 - 重复键更新 (UPSERT)

MySQL有这样的东西:

据我所知,SQLite 中不存在此功能,我想知道是否有任何方法可以在无需执行两个查询的情况下达到相同的效果。此外,如果这是不可能的,你更喜欢什么:

  1. SELECT +(插入或更新)
  2. UPDATE(+ INSERT如果更新失败
0 投票
2 回答
6737 浏览

mysql - Mysql关于重复键更新+子查询

使用这个问题的答案:需要 MySQL INSERT - SELECT 查询具有数百万条记录的表

我需要这个来与一个组一起工作并加入..所以要编辑:

我似乎无法更新值。如果我指定 old_table.value 我得到一个未定义的字段列表错误。

0 投票
2 回答
2215 浏览

sql - Oracle - 未对未修改的值执行更新的 UPSERT

我目前正在使用以下更新或插入 Oracle 语句:

这运行良好,只是如果数据与提供的参数值相同,更新语句将执行虚拟更新。我不介意在正常情况下进行虚拟更新,但是在此表上构建了一个复制/同步系统,使用表上的触发器来捕获更新的记录并为许多记录频繁执行此语句仅意味着我会在触发器中造成巨大的流量和同步系统。

是否有任何简单的方法可以重新编写此代码,如果没有必要,更新语句不会更新记录,而无需使用以下 IF-EXISTS 检查代码,我发现这些代码不够流畅,也可能对这项任务不是最有效的?


我也尝试使用 MERGE INTO 语句,但是当值未修改时它不适用于更新(更新不修改任何内容并执行插入,但发生 PK 冲突)。

完整的 MERGE INTO 示例:

看起来 Oracle 在内部使用 UPDATE...IF SQL%ROWCOUNT=0 THEN INSERT... 用于 MERGE INTO 子句?第二个 MERGE INTO 语句失败,因为 update 没有更新任何内容,因此执行了 INSERT 导致 PK 冲突,因为行已经存在,只是值没有改变。