2012-08-13 17 views
7

INSERT IGNOREINSERT ... ON DUPLICATE KEY UPDATEが存在することを理解します。ただし、重複したキーがある場合は、違反した固有キーの記録を保持するために一時テーブルにINSERTを実行して、ユーザーに出力できるようにしたいと考えています。MySql - 重複キーの挿入

できることはありますかON DUPLICATE INSERT?それが役に立ったら、私は一括挿入をしようとしています。

+0

可能重複の[MySQLのON DUPLICATE KEY監査またはログテーブルに挿入](http://stackoverflow.com/questions/3884344/mysql-on-duplicate-key-insert-into-an-audit-or-log-table) –

答えて

7

ON DUPLICATE KEY UPDATEでは、別のテーブルに挿入することはできません。また、代替機能もありません。

2つのカスタム/代替の方法、あなたはこれを達成することができます:

  1. stored procedureを使用してこの質問への受け入れ答えに概説されているよう:MySQL ON DUPLICATE KEY insert into an audit or log table

  2. 作成してテーブルごとINSERTを記録しtrigger別のテーブルにコピーし、重複しているテーブルを「ログ」で完全に照会します。これに似た

何かが動作するはずです:

CREATE TABLE insert_logs (
    id int not null 
); 

delimiter | 
CREATE TRIGGER insert_logs_trigger BEFORE INSERT ON your_table 
    FOR EACH ROW BEGIN 
     INSERT INTO insert_logs SET id = NEW.id; 
    END; 
| 

は、テーブル内の重複の一覧を取得するには、あなたは私たちの可能性:

SELECT id FROM insert_logs HAVING COUNT(id) > 1 GROUP BY id; 
+0

これは非常に役に立ちます、ありがとう! :) – matt

関連する問題