MySQL挿入を複製して無視する
MySQLテーブルの主キーとユニークインデックスは、同じインデックスを持つ複数の行がテーブルに追加されるのを防ぎます。 標準のINSERTステートメントを使用して重複行を挿入しようとすると、エラーが発生して挿入は失敗します。
MySQLは標準のINSERTステートメントに代わるいくつかの選択肢を提供し、それぞれが重複行をわずかに異なる方法で処理します。 "INSERT IGNORE"、 "INSERT ... ON DUPLICATE KEY UPDATE"、および "REPLACE"。
主キーと一意のインデックス
主キー索引および「UNIQUE」索引制約では、各行をその主キーまたはUNIQUE索引制約列の値で識別できるように、各行を索引列に固有の値を含めることが必要です。
通常のINSERTが主キーまたはUNIQUE制約インデックスに重複した値を含む行を挿入しようとすると、挿入は失敗し、トランザクション全体がロールバックされる可能性があります。
IGNOREを挿入
INSERT IGNOREはINSERTと同じ方法で行を挿入しますが、値が重複している行は無視され、エラーが発生することなく実行が続行されます。 重複値を含む行は挿入されません。 例えば:
my_table(unique_index_column、other_column)にIGNOREを挿入します。値(1、 'その他の値');
重複したキーの更新を挿入...
INSERT ... ON DUPLICATE KEY UPDATEは、通常通り、重複していない行を挿入します。 ただし、重複する行が見つかると、元の行に対してUPDATEが実行されます。 例えば:
my_table(unique_index_column、other_column)へのINSERT IN DUPLICATE KEY UPDATEその他の列= '重複した更新値';
交換
REPLACEはINSERTと同じように機能しますが、重複する行が見つかった場合は元の行を削除してから挿入を続行します。 重複する一意のインデックス値を持つ行は、元々その値を含んでいた行を置き換えます。 例えば:
my_table(unique_index_column、other_column)に値を代入してくださいVALUES(1、 'other value')