外部ソースからデータを挿入する必要があります。
私のPHP関数は定期的に実行され、結果を&のものをテーブルに挿入します。mysqlで重複レコードの挿入を破棄するにはどうすればよいですか?
すでに保存されている結果がしばしばあります。
再び挿入されます。
重複する結果を破棄して、新しい結果のみが入力されるようにする方法&重複は破棄されます。
外部ソースからデータを挿入する必要があります。
私のPHP関数は定期的に実行され、結果を&のものをテーブルに挿入します。mysqlで重複レコードの挿入を破棄するにはどうすればよいですか?
すでに保存されている結果がしばしばあります。
再び挿入されます。
重複する結果を破棄して、新しい結果のみが入力されるようにする方法&重複は破棄されます。
データベーステーブルの構造を変更できる場合は、UNIQUE INDEXを列に追加するか、または単一のエントリを一意に識別する列数を追加するのが最善の方法です。例:
変更テーブルtable
追加ユニークインデックスname
(column_one
、column_two
);
テーブルにすでに重複したレコードが含まれている場合、変更を試みるとエラーが発生します。その場合、あなたはIGNORE使用することができます。
ALTERがUNIQUE INDEX name
(column_one
、column_two
)を追加TABLE table
を無視してください。
不必要に大きなインデックスを作成することになりますことを心に留めておいてください:
http://dev.mysql.com/doc/refman/5.1/en/create-index.html (ページインデックスを作成する別の方法について説明しますが、ALTER TABLEを参照してください。
最初の回答には非常にいいです。 – Konerak
私はこれが愚かではあるが、重複を検出して挿入する方法を特定していることは分かっている。
これは、データセットによって異なります。一意のフィールドがある場合、最も簡単な方法はデータベース内のそのフィールドに一次キーである一意のインデックスを設定することです。データベースでは重複を挿入できません。あなたのエラーをチェックし、重複したキーエラーが出たら、あなたが期待しているものとして無視してください。
これはプライマリキーについてのポイントです。プライマリキーを賢明に定義すると、重複を処理する必要はありません。
テーブルにプライマリキーが設定されていると仮定すると、INSERT IGNORE ...
コマンドはこれを正確に実行します。
プライマリキーがない場合は、同じ名前/ IDを持つレコードが重複していることを示すレコードの名前またはIDに設定します。
一意のキーで十分です。プライマリキーは一意のキーの特殊なケースです:) – Konerak
すべてのリレーショナルデータベースでは、1つの行で主キーと一意の制約の両方を使用できます。
あなたはperson_id
列とfirst_name
とlast_name
列のユニークな組み合わせでPERSON
テーブルを持っているのであれば、あなたはperson_id
主キーを作成し、(first_name, last_name)
上で一意制約を追加する必要があります。主キーが一意であっても、一意性制約に違反する行をINSERTすることはできません。
「INSERT ... ON DUPLICATE KEY UPDATE ...」 - http:// dev。 – ajreal
INSERT IGNOREは、一意キー違反がない場合にのみ挿入され、それ以外の場合は何も行いません。 'ON DUPLICATE'はelseを更新します。 'REPLACE'は他のものを削除/挿入します。 – Konerak
私は主キーからのものだけでなく、一意キー違反を削除するので、 'REPLACE'ステートメントを避けようとしています。 – Danosaure