问题标签 [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 投票
9 回答
484706 浏览

sqlite - 如果不存在则插入其他更新?

我已经为经典的“如何插入新记录或更新已存在的记录”找到了一些“将成为”解决方案,但我无法让它们中的任何一个在 SQLite 中工作。

我有一个定义如下的表:

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

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

0 投票
2 回答
17143 浏览

java - 如何使用 Hibernate 模拟 upsert 行为?

我正在编写一个应用程序,将第三方数据源中的实体同步到我们自己的模式中,中间有一个转换/映射步骤。我正在使用 Hibernate 在我们自己的模式中表示和持久化实体。我遇到的一个问题是我的一张表上有一个唯一的多列键。我希望看到的行为类似于 upsert:当 Hibernate 去持久化一个实体并检测到一个唯一的约束违规时,它会进行更新。我们正在使用 MySQL,它提供了 INSERT ... ON DUPLICATE KEY UPDATE 语法,但我不确定如何或是否可以使用 Hibernate?

我想我总是可以尝试插入,如果我发现异常进行更新,但这似乎很笨拙且不理想。关于清洁方式的任何提示?

0 投票
1 回答
4255 浏览

mysql - MySql upsert 和自动增量导致差距

我有一个带有自动增量主键的 MySql 表,似乎所有各种 upsert 方法(INSERT IGNORE 和 ON DUPLICATE KEY UPDATE)都受到自动增量字段递增的功能的影响,甚至如果行已更新但未插入。这意味着在表格中引入了间隙,我认为这是不可取的。

所以问题是:如果 upsert 实际上只是更新行,是否有任何方法可以在不自动递增该字段的情况下在具有自动递增字段的表中插入记录。在我看来,这是 upsert 应该表现的方式,但似乎并非如此。

0 投票
3 回答
6137 浏览

jpa - LockModeType.PESSIMISTIC_WRITE 对于 JPA 中的 UPSERT 是否足够?

我读过这篇关于 JPA concurrency的文章,但要么我太厚,要么不够明确。

我正在寻找一个数据库控制的原子更新-if-found-else-insert 操作(一个UPSERT)。

我可怜的慢大脑看来,我可以——当然在一个事务中——运行一个锁定模式为 的命名查询PESSIMISTIC_WRITE,看看它是否返回任何结果,然后是 apersist()或 a update()

我不清楚的是使用PESSIMISTIC_WRITE锁与PESSIMISTIC_READ锁执行此操作之间的区别。我已经阅读了这些句子——我知道这PESSIMISTIC_READ是为了防止不可重复读取,并且PESSIMISTIC_WRITE是......好吧,也许我不太理解那个句子:-)——但在它下面只是一个 SQL SELECT FOR UPDATE,是的? 在这两种情况下?

0 投票
2 回答
128 浏览

sql - 为什么这种特定的语法不适用于更新插入?

我正在使用 SQL Server 2005,我想同步两个具有相同定义但存在于不同数据库中的表。MERGE INTO 仅存在于 2008 年,我更喜欢不必在 UPDATE 中指定列的语法。所以我偶然发现了使用以下语法的各种帖子:

但是当我尝试执行它时,我得到:

我怎样才能得到这个工作?我有多个需要同步的表,我不想在每个语句中指定所有列。

感谢您的任何提示!

0 投票
1 回答
143 浏览

sql-server-2008 - 如果我们有更多数据,Upsert 会更有效吗?

我必须删除一些数据并将一些数据插入同一个表中。

如果我们在循环中使用 Upsert 会有任何性能改进吗?

0 投票
1 回答
278 浏览

c# - 编写首先检查行是否存在并相应地更新或插入它的代码的最佳方法是什么?

我对更现代的数据库持久性编码方法相当陌生,我的直觉告诉我,我可能遗漏了一些东西,因为我的代码看起来“不优雅”,但我看不到另一种方法。

注意:我知道 Linq to SQL 可能被认为是“死的”。我更多地处于“学习概念”模式,假设我可以将其应用于实体框架或稍后休眠。

背景

我从一个数据库中获取记录并将它们放入另一个数据库中。对于检索到的每条记录,有两种情况:

  1. 这是一个全新的记录。
  2. 它是先前插入的具有更新值的记录。

我是如何在“旧代码”中做到这一点的

我编写了一个名为 UpsertRecord 的存储过程,它检查是否存在行并相应地处理插入和更新情况。打字很痛苦,这也是我开始寻找更现代的方法的部分原因。

到目前为止我使用 Linq to SQL 的内容:

问题:令我惊讶的是,我仍然必须输入两次。如果确实需要这样做,我相信这不会让那些更有经验的人感到惊讶,我很乐意在这一点上得到确认,否则,是否有更简单的方法来获得相同的功能(在 Salesforce 中也称为 Upsert) .

0 投票
18 回答
461341 浏览

postgresql - Postgres:如果不存在则插入

我正在使用 Python 写入 postgres 数据库:

但是因为我的某些行是相同的,所以我收到以下错误:

如何编写“插入,除非该行已经存在”的 SQL 语句?

我见过这样的复杂语句推荐:

但首先,这是否符合我的需要,其次,我怎样才能将其中一个作为简单的字符串执行?

0 投票
11 回答
1054461 浏览

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

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

例如:

假设唯一键是ID,并且在我的数据库中,有一行ID = 1。在这种情况下,我想用这些值更新该行。通常这会产生错误。
如果我使用INSERT IGNORE它会忽略错误,但它仍然不会更新。

0 投票
1 回答
1010 浏览

c# - 在 Dynamics CRM 4 中执行 upsert(更新或插入)操作的干净方法

目前,我正在使用以下代码在 CRM 中执行“更新插入”

我是否正确地假设这种类型的更新将清除我的业务实体中的所有现有信息?如果是这样,我怎样才能让实体从存储库中更新?我需要fetch,retrieve或类似的东西吗?

谢谢。