2011-02-10 3 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

テーブル の古い行が PRIMARY KEYまたはUNIQUEインデックスの新しい行と同じ値を持っている場合ことを除いて正確にINSERT、 のような作品をREPLACE、新しい行が が挿入される前に、古い 行が削除されます...

...テーブルが PRIMARY KEYまたはUNIQUEインデックスを持っていない限り、は REPLACを使用していることを 注意E文は意味をなさない。 は、使用するインデックスがないため、 は新しい行が重複しているかどうかを判断するため、 はINSERTと同等になります。

したがって、動作させるにはUNIQUE KEYを追加する必要があります。

3

あなたが言ったように:それは、UNIQUE制約がある場合にのみ、行を置換(実際には削除+挿入)します。あなたのテーブルには誰もいません。 MySQLのマニュアルから

関連する問題