2012-08-13 97 views
7

據我所知,存在INSERT IGNOREINSERT ... ON DUPLICATE KEY UPDATE。但是,當存在重複密鑰時,我想對臨時表執行INSERT以記錄已違反的唯一密鑰,以便我可以將其輸出給用戶。MySql - ON DUPLICATE KEY INSERT

有什麼辦法可以做ON DUPLICATE INSERT?如果有幫助,我試圖做一個批量插入。

+0

可能重複的[MySQL在重複鍵插入審計或日誌表](http://stackoverflow.com/questions/3884344/mysql-on-duplicate-key-insert-into-an-audit-or-log-table) – 2012-08-14 18:39:39

回答

7

使用ON DUPLICATE KEY UPDATE,您不能插入到另一個表中 - 也沒有可用的替代功能。

兩個自定義/替代方法可以做到這一點:

  1. 使用stored procedure在接受這個問題的答案概述:MySQL ON DUPLICATE KEY insert into an audit or log table

  2. 創建trigger是記錄每次INSERT爲你的餐桌到另一個表中並查詢充滿「日誌」的表以查找任何重複項。

類似的東西來這應該工作:

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 2012-08-15 00:54:49

相關問題