2011-07-11 12 views
0

テーブル内の行を別のテーブルに複製しようとしています。クエリはこのINSERTのMySQLで重複キーエラーを無視する

INSERT INTO `quote_block_arc` (`id`,`quote_id`,`name`,`description`,`price`,`hours`,`days`,`total_hours`,`is_print`,`amends`) SELECT `id`,`quote_id`,`name`,`description`,`price`,`hours`,`days`,`total_hours`,`is_print`,`amends` FROM `quote_block` WHERE `quote_id` = '41' 

のように見えますが、それはこの行の重複キーがあるセーブ失敗し、その警告を無視し、クエリを実行する方法はありますありますか?へ(エントリが重複)、エラーをチェックし、エラーコードが1062の場合 -

+2

なぜあなたのテーブルに重複キーを持たせたいのですか?一意キーをネットしない場合は、スキーマ内の制約を削除します。一意のキーが必要な場合は、重複したキーは必要ありません。 – pintxo

+0

@cmmi - 重複はありません。1つのテーブルから別のテーブルにデータを挿入しています。 – dotty

答えて

3

このエラーは、テーブルの列の1つをUNIQUEに指定したために発生します。この列に同じ値を持つ2行を持つことはできません。代わりに既存の行を置き換える場合は、INSERTの代わりにREPLACEを使用してください。実際に列に同じ値を含む行が必要な場合は、UNIQUE修飾子をその列から削除します。

他の回答の一部に記載されているようにINSERT IGNOREを使用すると、エラーは発生しませんが、テーブルは更新されません。

+0

私はREPLACEを調べました。うまくいきます。しかし、私はREPLACEを使用する必要があり、他の時にはINSERTが必要になることがありますが、 "REPLACE OR INSERT INTO"を行う方法はありますか? – dotty

+0

['INSERT ... ON DUPLICATE KEY UPDATE'](http://dev.mysql.com/doc/refman/5.5/en/insert-on-duplicate.html) – Naltharial

2

あなたはもう一つの方法は、それが偽だ場合、クエリの結果をチェックすることですINSERT IGNORE、またはINSERT ... ON DUPLICATE KEY UPDATE を行うことができ

INSERT IGNORE INTO `quote_block_arc` (`id`,`quote_id`,`name`,`description`,`price`,`hours`,`days`,`total_hours`,`is_print`,`amends`) SELECT `id`,`quote_id`,`name`,`description`,`price`,`hours`,`days`,`total_hours`,`is_print`,`amends` FROM `quote_block` WHERE `quote_id` = '41' 
+0

キーエラーが重複している場合は、このエントリを追加しません。 – Naltharial

+0

質問は彼がエラーを無視したいと述べています – ianbarker

3

を試してみてくださいエラーがないかのように実行を続行します。

1

一意制約を持つテーブルに重複行があると、その整合性が失われます。キーの内容を確認し、実際にコピーする必要があるかどうかを確認する必要があります。たとえば、AUTO_INCREMENTの主キーは、データベースによって自動的に埋め込まれるため、挿入されません。 idがAUTO_INCREMENTの場合、宛先テーブルquote_block_arcを確認します。そうであれば、それをINSERTから削除し、MySQL自身でそれを挿入させます。

INSERT IGNOREを使用すると、が挿入されます。重複するキーを上書きする場合はREPLACEを使用してください。ただし、前に説明した方法よりも重複するキーはお勧めしません。

0

@cmmi - 重複はありません。1つのテーブルから別のテーブルにデータを挿入しています。

は、私はあなたが、あなたのSELECTサブクエリにidにそれを追加し、あなたがターゲットquote_block_arcからhighestid取得をお勧めします。そうすれば、それらの行を参照する他のテーブルの他の関連するエントリを更新する方法を知っています。 RDBMSに新しいidを割り当てるようにした場合、すべての関係は失われます。

関連する問題