当前位置: 首页 > 面试题库 >

获取为ON DUPLICATE KEY UPDATE多次插入而插入的行数?

戴品
2023-03-14
问题内容

我有一个很大的桌子,主键为BINARY(20)

该表大约有1700万行。Cron作业每小时都会使用该ON_DUPLICATE_KEY_UPDATE语法尝试向该表中插入多达50,000个新条目。

cronjob中的每个插入都具有1,000个值(多个插入)。如何从此查询获取插入表中的行数?我前后都无法进行行计数,因为大约有1700万行,而且查询过于昂贵。

在手册中mysql说,对于插入的行,受影响的行数为1,对于更新的字段为2,这意味着在我的1000 INSERT ON DUPLICATE KEY
UPDATE查询中,我可能影响的行范围为1000-2000,但是我无法告诉您从该号码中插入了多少条记录?

我该如何克服?

谢谢


问题答案:

插入数将是2000减去受影响的行数。更普遍:

(numberOfValuesInInsert * 2) - html" target="_blank">mysql_affected_rows()

编辑:

正如tomas指出的那样,MySQL文档实际上说:

使用ON DUPLICATE KEY UPDATE,如果将行作为新行插入,则每行的受影响行值为1;如果更新了现有行,则为2;如果将现有行
设置为其当前值,则为0

[强调我的]

因此,如果有可能将现有行设置为相同的值,则无法确定更新了多少行与插入了多少行,因为两次插入将与具有不同值的一次更新与具有相同值的一次更新无法区分。



 类似资料:
  • 在下面的代码中,我得到。我读到,也可以直接从获取最后插入的行id。在我的代码中,我把空插入改为长,并尝试了许多其他的东西,就像我在互联网上找到的例子一样,但是每次我都会出错。你想给我提供一个代码/解决方案,从@插入获取行/用户ID吗? 实体 存储库 查看模型 片段/活动

  • 问题内容: 我想将psycopg2用于多行,然后使用单个查询(按顺序)返回所有s。这就是PostgreSQL扩展的目的,并且似乎可以使用正常工作: 现在,为了传递动态生成的数据,似乎是一种方法: 但是,在这种情况下,将产生以下内容: 我如何才能正确返回所有s而不是仅返回一个? 问题答案: 您不应该从以下位置获得结果: 该功能对于更新数据库的命令最有用:查询返回的任何结果集都将被丢弃。 根据psyc

  • 问题内容: 使用PDO运行以下查询(实际上,我使用准备好的语句,但存在相同的问题) 如何获得有关和的记录的ID ? 从字面上返回最后一个ID。 采取这个最后的ID,减去记录数并假定范围覆盖了我的所有记录,是否足够?会有差距/跳跃。是否保证此查询是原子查询? 问题答案: 如果您使用的是MyISAM表,则由于表级别的锁定机制,您只能获得一定范围的ID。 阅读http://dev.mysql.com/d

  • 问题内容: 我正在使用PHP中的mvc结构,我想检索最后插入的行ID。 我创建了以下sql代码: 但不幸的是我遇到了这个错误: 我也尝试过此堆栈链接,但不适用于我,因此如果您能帮助我获取ID,我将非常高兴。 我也在这里共享我的controller.php文件。 问题答案: 你快到了。 如果您查看lastInsertId的手册页,则会在数据库句柄上调用它- 您当前正在语句中对其进行调用。 您只需要致

  • 问题内容: 我想编写一个函数,为插入的行返回一列的值(在这种情况下为自动递增的主键)。 本质上,我想插入一些新数据,生成一个新的主键,然后获取该键。我可以简单地在表中查找最高的主键,但是有可能其他人也可以运行该函数,并且我可以返回错误的键,对吗? 解决这个问题的最简单方法是什么? 问题答案: 正如评论中指出的那样,来自MySQL文档: 该函数不受竞争条件的影响,因为它在特定于您的连接的MySQL中

  • 这是我的密码: 如您所知,它会在数据库中插入一个新行。现在我需要获取插入行的。我怎么能得到这个? 注意,我知道,如果我使用