我知道存在 INSERT IGNORE
和 INSERT ... ON DUPLICATE KEY UPDATE
。但是,当有重复键时,我想对临时表执行 INSERT
以记录已被违反的唯一键,以便我可以将其输出给用户.
有什么办法可以ON DUPLICATE INSERT
吗?如果有帮助,我正在尝试进行批量插入。
最佳答案
使用 ON DUPLICATE KEY UPDATE
,您不能插入另一个表 - 也没有可用的替代函数。
您可以通过两种自定义/替代方式实现此目的:
使用
stored procedure
如该问题的已接受答案中所述:MySQL ON DUPLICATE KEY insert into an audit or log table创建
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;
关于MySql - 关于重复键插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11940506/