使用以下mySQL查询:
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的报告:
我仅有的数字是:
是否有任何数学(或其他)魔法能够可靠地返回插入、更新和跳过(重复)的行数?
对于加分,如果只给出这两个数字(行数和受影响行数)就无法正确计算插入、更新和重复的数量,那么在“重复键更新”查询之前和之后查询表中的行数是否有更好的(性能上的)方法?
请注意,我已经尝试过接受的答案和列出的其他方程式: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)?
(还请注意,“插入忽略”或“替换到”查询都不适合替换此特定实例中的“插入重复键更新”查询)。
发布于 2014-05-21 01:31:15
我认为没有更多的信息是不可能的--仅仅用要插入的行数和受影响的行数是不够的。
mysqli->info返回一个有用的字符串,该字符串还提供了一个重复计数--我们可以从中计算出其余的内容。
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;https://stackoverflow.com/questions/23148574
复制相似问题