一尘不染

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

mysql

我有一个很大的桌子,主键为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,但是我无法告诉您从该号码中插入了多少条记录?

我该如何克服?

谢谢


阅读 214

收藏
2020-05-17

共1个答案

一尘不染

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

(numberOfValuesInInsert * 2) - mysql_affected_rows()

编辑:

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

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

[强调我的]

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

2020-05-17