2012-08-13 15 views
7

INSERT IGNORE ve INSERT ... ON DUPLICATE KEY UPDATE adreslerinin var olduğunu anlıyorum. Ancak, yinelenen bir anahtar olduğunda, ihlal edilen benzersiz anahtarın kaydını tutmak için geçici bir tabloya INSERT yapmak istiyorum, böylece kullanıcıya gönderebilirim.MySql - DUPLICATE ANAHTARINDA

ON DUPLICATE INSERT yapmamın bir yolu var mı? Eğer yardımcı olursa, toplu bir ekleme yapmaya çalışıyorum.

+0

olası yinelenen bir [MySQL AÇIK YİNELENEN KEY Bir denetim veya kayıt tablosuna ekle] (http://stackoverflow.com/questions/3884344/mysql-on-duplicate-key-insert-into-an-audit-or-log-table) –

cevap

7

ON DUPLICATE KEY UPDATE ile başka bir tabloya yerleştiremezsiniz - veya başka bir işlev mevcut değildir.

İki özel/alternatif yollar bu başarabilirsiniz:

  1. bir stored procedure kullanarak bu soruya kabul edilen yanıt özetlendiği gibi: MySQL ON DUPLICATE KEY insert into an audit or log table

  2. oluşturma tablo için her INSERT açmış bir trigger başka bir tabloya ve herhangi bir kopya için "günlükleri" dolu tabloyu sorgulama. Buna benzer

şey çalışmalıdır:

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

tablodaki kopyaların bir listesini almak için, bize olabilir:

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

Bu çok yardımcı oldu, teşekkürler ! :) – matt