mySQL“REPLACE INTO”:在这种情况下是否有任何影响

时间:2011-02-10 22:43:00

标签: mysql

我负责将一些旧代码移植到一个新平台,我正在看一些让我很困惑的东西。我认为我熟悉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

我插入了一行与现有行完全相同的行并没有发生任何事情(插入了新行,旧行仍然存在)...我错过了什么或原来的开发人员做了什么完全没用了?

2 个答案:

答案 0 :(得分:3)

就像你说的那样:如果UNIQUE约束到位,它只会替换(实际上是delete + insert)行。在你的表中没有。

答案 1 :(得分:2)

来自MySQL手册:

  

REPLACE与INSERT完全一样,   除非表中有一个旧行   与a的新行具有相同的值   PRIMARY KEY或UNIQUE索引,旧的   在新行之前删除行   插入...

     

... 请注意,除非表格有   PRIMARY KEY或UNIQUE索引,使用   REPLACE语句毫无意义。它   变得等同于INSERT,因为   没有索引可供使用   确定新行是否重复   另一个。

因此,您需要添加UNIQUE KEY才能使其正常工作。