首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >重复键更新+受影响行数的MySQL

重复键更新+受影响行数的MySQL
EN

Stack Overflow用户
提问于 2014-04-18 06:21:19
回答 1查看 2.4K关注 0票数 4

使用以下mySQL查询:

代码语言:javascript
复制
INSERT INTO table (col_a,col_b,col_c,col_d) VALUES (val_a,val_b...val_x) ON DUPLICATE KEY UPDATE col_d = VALUES(col_d)  

考虑到mySQL的报告:

  • 每次插入受影响的一行
  • 每次更新受影响的2行
  • 0行影响每个副本(和info()似乎不正确(?)无论跳过多少重复条目,始终报告0重复项)

我仅有的数字是:

  • 我尝试插入/更新的行总数(可以是47、163、282这样的任意数目--它不是一次设定的行数)。
  • mySQL中报告的受影响行总数。

是否有任何数学(或其他)魔法能够可靠地返回插入、更新和跳过(重复)的行数?

对于加分,如果只给出这两个数字(行数和受影响行数)就无法正确计算插入、更新和重复的数量,那么在“重复键更新”查询之前和之后查询表中的行数是否有更好的(性能上的)方法?

请注意,我已经尝试过接受的答案和列出的其他方程式:Getting number of rows inserted for ON DUPLICATE KEY UPDATE multiple insert?

但对我来说,这些似乎在基本测试中失败了,比如:

10行,2插入,2更新,6重复= 10行,6 mysql受影响的行

(10*2 = 20) -6= 14插入(对于接受的答案)?或,

6-10= -4更新(第二个答案中的等式3)?

(还请注意,“插入忽略”或“替换到”查询都不适合替换此特定实例中的“插入重复键更新”查询)。

EN

回答 1

Stack Overflow用户

发布于 2014-05-21 01:31:15

我认为没有更多的信息是不可能的--仅仅用要插入的行数和受影响的行数是不够的。

mysqli->info返回一个有用的字符串,该字符串还提供了一个重复计数--我们可以从中计算出其余的内容。

代码语言:javascript
复制
list($rec, $dupes, $warns) = sscanf($mysqli->info, "Records: %d Duplicates: %d Warnings: %d"); // courtesy of user at big lake dot com - php.net
$inserts = $total_rows_affected - ($dupes * 2);
$updates = ($total_rows_affected - $inserts)/2;     
$skipped = $rec - ($inserts + $updates);     
$total = $rec;
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23148574

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档