我试图编写一个upsert,当我按顺序运行这两个查询时:

// The numbers here are arbitrary, but id matches one already existing in db.
SET @id = 1069, @exportid = null, @photoid = 11223344;

INSERT INTO student (id_number, exportid, photoid) VALUES (@id, @exportid, @photoid)
  ON DUPLICATE KEY UPDATE exportid = @exportid, photoid = @photoid;

它点击更新并做了一些更改,我得到“2行受影响”。为什么它不只是一个(如果它点击了insert,我会像预期的那样受到一行的影响)?
表的CREATE语句,其中有一堆非键列已被编辑:
CREATE TABLE  `demo`.`student` (
  `id_number` varchar(15) NOT NULL DEFAULT '',
  `exportid` varchar(20) DEFAULT NULL,
  `photoid` varchar(25) DEFAULT NULL,
   PRIMARY KEY (`id_number`),
  KEY `EXPORTID` (`exportid`),
  KEY `NAME` (`last_name`,`student`,`id_number`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

最佳答案

对于重复密钥更新,如果
如果已更新现有行,则将行插入为新行,2行;
0,如果将现有行设置为其当前值。
official docs

关于mysql - 为什么此SQL“UPSERT”会影响两行?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49017433/

10-11 03:16