ON DUPLICATE KEY重复插入,影响行数2rows

新手上路,请多包涵

使用insert on duplicate key update插入重复数据的时候,只更新了重复唯一索引的数据,返回影响行数为2行。
查资料都是说操作会执行两部操作:
1.insert表尝试插入【尝试插入,存在重复数据,此时应无表数据变更】
2.update更新唯一索引的值【变更行数1】
所以比较困惑另外一处变更是发生在哪里,第一次提问,求大佬解惑

相关代码

// 请把代码文本粘贴到下方(请勿用图片代替代码)
表结构

CREATE TABLE test1
(
  id     INT AUTO_INCREMENT
    PRIMARY KEY,
  name   VARCHAR(20) NOT NULL,
  stu_id INT         NOT NULL
)
  ENGINE = InnoDB;

id唯一

insert into test1 VALUES ('4','小黑','2') on DUPLICATE KEY UPDATE stu_id=stu_id+1;
commit;
阅读 9.2k
2 个回答

insert on duplicate key update是不会去做删除数据操作的,replace语句才会
影响行数为2的原因,可以参考这篇文章mysql自增id超大问题查询

insert on duplicate key update 可能的执行过程:

  1. 首先插入数据
  2. 检测到存在重复数据, 删除数据
  3. 改用 update 操作

原因可能出现在第二步上

官网文档:

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. If you specify the CLIENT_FOUND_ROWS flag to the mysql_real_connect() C API function when connecting to mysqld, the affected-rows value is 1 (not 0) if an existing row is set to its current values.

insert-on-duplicate
推荐问题
宣传栏