我了解存在INSERT IGNORE和INSERT ... ON DUPLICATE KEY UPDATE。但是,当有重复的键时,我想对INSERT临时表进行操作,以记录已违反的唯一键的记录,以便将其输出给用户。
INSERT IGNORE
INSERT ... ON DUPLICATE KEY UPDATE
INSERT
有什么办法可以做ON DUPLICATE INSERT吗?如果有帮助,我正在尝试进行批量插入。
ON DUPLICATE INSERT
使用ON DUPLICATE KEY UPDATE,您不能插入到另一个表中-也没有可用的替代功能。
ON DUPLICATE KEY UPDATE
您可以通过两种自定义/替代方式来实现此目的:
使用stored procedure对此问题的可接受答案中概述的:将MySQL ON DUPLICATE KEY插入到审计表或日志表中
stored procedure
创建一个trigger将INSERT您的表的所有内容记录到另一个表中,并在充满“日志”的表中查询是否有重复项。
trigger
与此类似的东西应该起作用:
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;