2012-08-13 96 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

相关问题