今天使用到MySQL一个 INSERT ... ON DUPLICATE KEY UPDATE 的语法,发现返回的影响行数是2,很奇怪,然后从网上找,发现这篇文章
https://segmentfault.com/a/1190000017268633
豁然开朗!
INSERT ... ON DUPLICATE KEY UPDATE ...
影响的行数是1为什么返回2?
为什么会这样呢,按理说影响行数就是1啊,看看官方文档的说明
With ON DUPLICATE KEY UPDATE, the affected-rows value per row is 1 if the row is inserted as a new row, 2 if an existing row is updated, and 0 if an existing row is set to its current values
官方明确说明了,插入影响1行,更新影响2行,0的话就是存在且更新前后值一样。是不是很不好理解?
其实,你要这样想就好了,这是为了区分到底是插入了还是更新了,返回1表示插入成功,2表示更新成功。
再次测试之后发现,如果自增id到10,如果经过这个SQL的更新数据之后 下一个自增id是12而不是11。