作者:王耀 | 来源:互联网 | 2022-12-02 16:51
该收益为受影响的行多项源自,这是有据可查的在多个地方.INSERT ... SELECT
... ON DUPLICATE KEY UPDATE
(inserted count) + (updated count) * 2
但是在MySQL命令行工具的输出中,我注意到了这个额外的信息:
> INSERT INTO ...
-> SELECT ... FROM ...
-> ON DUPLICATE KEY UPDATE ...
-> ;
Query OK, 97 rows affected (0.03 sec)
Records: 2425 Duplicates: 28 Warnings: 0
即,数字Records:
和Duplicates:
.
分析确定:
将97 rows affected
是受影响的行(又名ROW_COUNT()
).
Records: 2425
是SELECT
部件提取的行数.
Duplicates: 28
是ON DUPLICATE KEY UPDATE
部件实际更改的行数.
所以:
affected-rows - Duplicates * 2
是实际插入的行数.
Records - affected-rows - Duplicates
是重复但未更改的行数(即值设置为相同的值).
这给我们带来了一个问题:怎样才能获得这些数字Records
和Duplicates
在一个程序? (我正在使用MySQL Connector/J,如果这有助于回答这个问题.)
对于可能Records:
在发出SELECT
上FOUND_ROWS()
后直接INSERT ... SELECT ... ON DUPLICATE KEY UPDATE
是单向的.
我不知道Duplicates:
从哪里来.