2012-08-13 7 views
7

Ich verstehe, dass es existiert INSERT IGNORE und INSERT ... ON DUPLICATE KEY UPDATE. Wenn es jedoch einen doppelten Schlüssel gibt, möchte ich eine INSERT in eine temporäre Tabelle tun, um eine Aufzeichnung des eindeutigen Schlüssels zu erhalten, der verletzt wurde, damit ich ihn an den Benutzer ausgeben kann.MySql - ON DUPLICATE KEY INSERT

Gibt es eine Möglichkeit, eine ON DUPLICATE INSERT zu tun? Wenn es hilft, versuche ich einen Masseneinsatz.

+0

möglich Duplikat [MySQL ON DUPLICATE KEY Einfügen in eine Audit- oder Log-Tabelle] (http://stackoverflow.com/questions/3884344/mysql-on-duplicate-key-insert-into-an-audit-or-log-table) –

Antwort

7

Mit ON DUPLICATE KEY UPDATE können Sie nicht in eine andere Tabelle einfügen - noch ist eine alternative Funktion verfügbar.

  1. ein stored procedure Unter Anwendung der in der akzeptierte Antwort auf diese Frage umrissen: MySQL ON DUPLICATE KEY insert into an audit or log table

  2. Erstellen einer trigger, die jeden INSERT für Ihren Tisch angemeldet

    Zwei custom/alternative Möglichkeiten, wie Sie dies erreichen in eine andere Tabelle und Abfragen der Tabelle voller "Protokolle" für alle Duplikate.

Etwas ähnliches wie das funktionieren sollte:

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; 
| 

Um eine Liste der Duplikate in der Tabelle zu erhalten, könnten Sie uns:

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

Dies ist sehr hilfreich, danke ! :) – matt