【发布时间】:2018-02-27 20:30:46
【问题描述】:
我试图写一个 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 行受影响”。为什么它不只是一个(如果它命中插入,我会按预期影响 1 行)?
表的 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;
【问题讨论】:
-
你的桌子上有多个唯一键吗?
-
@Uueerdo 我的错。我之前指定了 id_number 来引用一个特定的 id。让我编辑帖子。
-
你是如何创建表格的?
id_number是主键/唯一键吗? -
@Sirmyself 是的,它是主要的。