当前位置: 首页 > 知识库问答 >
问题:

mysql insert ...在重复的键更新上返回插入的行 ID

葛鸿轩
2023-03-14

好吧,问题不是关于如何返回ID,而是更像是如何跳过它...我有一种情况,我使用last_insert_id()获取最后插入行的id,但如果没有插入行,我想得到一个零。问题如下:

    < li >我插入...更新一些记录:由于这些行是新插入的,所以返回所有id < li >然后我重复该过程:这次不返回id。耶!这正是我想要的 < li >我更改了一个列值并重复该过程:但现在返回的是我更改了列值的行的ID。这让我非常生气。如果mysql没有插入任何内容,我根本不希望它返回ID

所以总结一下:

  • 插入新记录时:返回ID
  • 插入相同记录时:不返回ID
  • 更新值时:返回更新行的更新ID:(

是否有解决此问题的方法?

我知道会发生这种情况,因为mysql可能不会对相同的记录执行更新,但仍然......我肯定想知道如何解决这个问题。

共有1个答案

漆雕誉
2023-03-14

您应该能够检索插入的行数,并使用它来确定是否插入了任何内容。如果您使用的是“原始”查询(即没有可能提供插入行数的API),则看起来ROW_COUNT()可能会为您提供所需的内容。

 类似资料:
  • 好的,这个问题不是关于如何返回ID,而是更像是如何跳过它...我有一种情况,我使用last_insert_id()获取最后插入的行的id,但如果没有插入行,我希望得到一个零。问题如下: I INSERT...UPDATE一些记录:由于行是新插入的,因此返回所有ID 然后重复这个过程:这一次不返回ID。耶!这正是我想要的 我更改了一个列值并重复该过程:但现在返回了我更改了列值的行的ID。这让我很生气

  • 问题内容: 我有一张桌子,就是PK。当我插入行时,将有重复的键,并且我需要总结三个统计信息。我在Java中对PreparedStatement使用以下查询: 是否有更简洁的查询来实现?因为我简化了查询,所以那里有十多个统计信息。 问题答案:

  • 问题内容: 我正在执行插入查询,其中如果已经存在唯一键,则许多列中的大多数都需要更新为新值。它是这样的: 我不确定该子句的语法应该是什么。如何从子句引用当前行? 问题答案: MySQL将假定等号之前的部分引用INSERT INTO子句中命名的列,而第二部分引用SELECT列。

  • 问题内容: MySQL有这样的东西: 据我所知,SQLite中不存在此功能,我想知道的是,是否有任何方法可以实现相同的效果而不必执行两个查询。另外,如果这不可能,那么您更喜欢什么: SELECT +(插入或更新) 或 UPDATE( 如果UPDATE失败,则 + INSERT ) 问题答案: 因为3.24.0 SQLite还支持upsert ,所以现在您可以简单地编写以下内容

  • 问题内容: 我了解存在和。但是,当有重复的键时,我想对临时表进行操作,以记录已违反的唯一键的记录,以便将其输出给用户。 有什么办法可以做吗?如果有帮助,我正在尝试进行批量插入。 问题答案: 使用,您不能插入到另一个表中-也没有可用的替代功能。 您可以通过两种自定义/替代方式来实现此目的: 使用对此问题的可接受答案中概述的:将MySQL ON DUPLICATE KEY插入到审计表或日志表中 创建一

  • 我试图在jOOQ 3.4.2中使用UpdateableRecords插入一个新记录。该模式非常简洁且易于使用,除了将空值读取为无值,并忽略默认值或生成的索引。我如何使用UpdateableRecord来执行一个尊重默认值和生成索引的插入? 这是我的桌子: 注意我的主键和默认值。下面是我的jOOQ代码: 但是当我运行这个程序时,我会在“org\u person\u id”列中得到一个错误。 我注意到