2011-02-10 16 views
0

我負責將一些舊代碼移植到新平臺上,而且我看着有點讓我非常困惑。我認爲我熟悉REPLACE INTO的功能,但這讓我感到不確定。 MySQL的查詢是:mySQL「REPLACE INTO」:它在這種情況下是否有任何作用

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

從MySQL手冊:

更換作品酷似INSERT, 不同之處在於,如果一個老行的表 具有相同的值作爲一個 主鍵的新行或唯一索引,被 插入新行之前老 行被刪除...

... 注意,除非表有 PRIMARY KEY或唯一索引,使用 REPLAC E語句沒有意義。它 變得相當於INSERT,因爲 沒有要使用的索引 確定一個新行是否重複 另一個。

所以你需要添加UNIQUE KEY爲了它的工作。

3

就像你說的那樣:如果UNIQUE約束就位,它只會替換(實際上刪除+插入)行。在你的桌子裏沒有。