2012-08-13 19 views
7

Rozumiem, że istnieje INSERT IGNORE i INSERT ... ON DUPLICATE KEY UPDATE. Jednakże, gdy istnieje zduplikowany klucz, chciałbym zrobić INSERT do tabeli tymczasowej, aby zachować zapis unikalnego klucza, który został naruszony, tak, że mogę wyprowadzić go do użytkownika.MySql - W DUPLICATE KLUCZOWY WSTAW

Czy jest jakiś sposób, aby zrobić ON DUPLICATE INSERT? Jeśli to pomaga, próbuję wykonać wkładkę luzem.

+0

możliwe duplikat [MySQL ON duplikat KEY wstaw do tabeli audytu lub dziennika] (http://stackoverflow.com/questions/3884344/mysql-on-duplicate-key-insert-into-an-audit-or-log-table) –

Odpowiedz

7

Z nie można wstawić do innej tabeli - nie ma również dostępnej alternatywnej funkcji.

Dwa niestandardowe/alternatywne sposoby osiągnięcia tego celu:

  1. Korzystanie z stored procedure jak wskazano w przyjętym odpowiedzi na to pytanie: MySQL ON DUPLICATE KEY insert into an audit or log table

  2. Zakładanie trigger że rejestrowane za każdym INSERT na stole do innej tabeli i zapytanie do tabeli pełnej "logów" dla wszystkich duplikatów.

Coś podobnego do tego powinno działać:

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

Aby uzyskać listę duplikatów w tabeli, można się z nami:

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

Jest to bardzo pomocne, dzięki ! :) – matt

Powiązane problemy