2010-11-27 14 views
0

外部ソースからデータを挿入する必要があります。
私のPHP関数は定期的に実行され、結果を&のものをテーブルに挿入します。mysqlで重複レコードの挿入を破棄するにはどうすればよいですか?

すでに保存されている結果がしばしばあります。
再び挿入されます。

重複する結果を破棄して、新しい結果のみが入力されるようにする方法&重複は破棄されます。

+1

「INSERT ... ON DUPLICATE KEY UPDATE ...」 - http:// dev。 – ajreal

+0

INSERT IGNOREは、一意キー違反がない場合にのみ挿入され、それ以外の場合は何も行いません。 'ON DUPLICATE'はelseを更新します。 'REPLACE'は他のものを削除/挿入します。 – Konerak

+0

私は主キーからのものだけでなく、一意キー違反を削除するので、 'REPLACE'ステートメントを避けようとしています。 – Danosaure

答えて

1

データベーステーブルの構造を変更できる場合は、UNIQUE INDEXを列に追加するか、または単一のエントリを一意に識別する列数を追加するのが最善の方法です。例:

変更テーブルtable追加ユニークインデックスnamecolumn_onecolumn_two);

テーブルにすでに重複したレコードが含まれている場合、変更を試みるとエラーが発生します。その場合、あなたはIGNORE使用することができます。

ALTERがUNIQUE INDEX namecolumn_onecolumn_two)を追加TABLE tableを無視してください。

不必要に大きなインデックスを作成することになりますことを心に留めておいてください:

  • 遅く書き込みクエリ取り上げ

    • より多くのディスクスペース(INSERT、UPDATEを、DELETE)

    http://dev.mysql.com/doc/refman/5.1/en/create-index.html (ページインデックスを作成する別の方法について説明しますが、ALTER TABLEを参照してください。

  • +0

    最初の回答には非常にいいです。 – Konerak

    0

    私はこれが愚かではあるが、重複を検出して挿入する方法を特定していることは分かっている。

    これは、データセットによって異なります。一意のフィールドがある場合、最も簡単な方法はデータベース内のそのフィールドに一次キーである一意のインデックスを設定することです。データベースでは重複を挿入できません。あなたのエラーをチェックし、重複したキーエラーが出たら、あなたが期待しているものとして無視してください。

    0

    これはプライマリキーについてのポイントです。プライマリキーを賢明に定義すると、重複を処理する必要はありません。

    0

    テーブルにプライマリキーが設定されていると仮定すると、INSERT IGNORE ...コマンドはこれを正確に実行します。

    プライマリキーがない場合は、同じ名前/ IDを持つレコードが重複していることを示すレコードの名前またはIDに設定します。

    +0

    一意のキーで十分です。プライマリキーは一意のキーの特殊なケースです:) – Konerak

    0

    すべてのリレーショナルデータベースでは、1つの行で主キーと一意の制約の両方を使用できます。

    あなたはperson_id列とfirst_namelast_name列のユニークな組み合わせでPERSONテーブルを持っているのであれば、あなたはperson_id主キーを作成し、(first_name, last_name)上で一意制約を追加する必要があります。主キーが一意であっても、一意性制約に違反する行をINSERTすることはできません。

    関連する問題