REPLACE [LOW_PRIORITY | DELAYED]
        [INTO] tbl_name [(col_name,...)]
        VALUES (expression,...),(...),...
または  REPLACE [LOW_PRIORITY | DELAYED]
        [INTO] tbl_name [(col_name,...)]
        SELECT ...
または  REPLACE [LOW_PRIORITY | DELAYED]
        [INTO] tbl_name
        SET col_name=expression, col_name=expression,...
        REPLACE は INSERT
        とほぼ同じように動作しますが、唯一異なる点として、UNIQUE
        インデックスまたは PRIMARY KEY
        に関して新しいレコードと同じ値がテーブル内の以前のレコードに含まれていると、以前のレコードが削除されてから新しいレコードが挿入されます。
        See 項6.4.3. 「INSERT 構文」。
      
        つまり、REPLACE
        ステートメントでは、以前からあるレコードの値にはアクセスできないことになります。一部の初期バージョンの
        MySQL
        では、このアクセスが可能のように見えましたが、これはバグであり、修正されました。
      
        REPLACE
        を使用するためには、対象のテーブルに対する
        INSERT 権限と DELETE
        権限が必要です。
      
        REPLACE
        コマンドの使用時、以前のレコード 1
        つが新しいレコードで置き換えられると、mysql_affected_rows()
        によって 2
        が返されます。これは重複の削除後にレコードが
        1 つ挿入されたためです。
      
        これに基づき、影響されたレコードの値が
        1(追加)と
        2(置換)のどちらかチェックすることによって、REPLACE
        によってレコードが 1
        つ追加されたのか、または置き換えられたのかを簡単に判別できます。
      
        注意: テーブルに UNIQUE
        インデックスまたは PRIMARY KEY
        が設定されていない場合、REPLACE
        コマンドを使用しても意味がありません。この場合、新しいレコードが既存のものと重複しているかどうかの判別に使用するインデックスがないため、REPLACE
        コマンドは INSERT
        と同じになります。
      
        以下は、使用されるアルゴリズムを詳細に示したものです(このアルゴリズムは
        LOAD DATA ... REPLACE
        でも使用されます)。
      
- Insert the row into the table
  - While duplicate key error for primary or unique key
    - Revert changed keys
    - Read conflicting row from the table through the duplicate key value
    - Delete conflicting row
    - Try again to insert the original primary key and unique keys in the tree
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.

