我负责将一些旧代码移植到一个新平台,我正在看一些让我很困惑的东西。我认为我熟悉REPLACE INTO所做的事情,但这让我感到不确定。 mySQL查询是:
REPLACE INTO theTable SET value1 = ?, value2 = ?
我的理解是,只有将这些列定义为唯一时才会产生影响。 theTable的表定义如下:
CREATE TABLE `theTable` (
`value1` int(11) unsigned DEFAULT NULL,
`value2` int(11) unsigned DEFAULT NULL,
KEY `value1` (`value2`),
KEY `value2` (`value2`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1
我插入了一行与现有行完全相同的行并没有发生任何事情(插入了新行,旧行仍然存在)...我错过了什么或原来的开发人员做了什么完全没用了?
答案 0 :(得分:3)
就像你说的那样:如果UNIQUE约束到位,它只会替换(实际上是delete + insert)行。在你的表中没有。
答案 1 :(得分:2)
来自MySQL手册:
REPLACE与INSERT完全一样, 除非表中有一个旧行 与a的新行具有相同的值 PRIMARY KEY或UNIQUE索引,旧的 在新行之前删除行 插入...
... 请注意,除非表格有 PRIMARY KEY或UNIQUE索引,使用 REPLACE语句毫无意义。它 变得等同于INSERT,因为 没有索引可供使用 确定新行是否重复 另一个。
因此,您需要添加UNIQUE KEY
才能使其正常工作。