小编典典

MySql-在重复键插入上

sql

我了解存在INSERT IGNOREINSERT ... ON DUPLICATE KEY UPDATE。但是,当有重复的键时,我想对INSERT临时表进行操作,以记录已违反的唯一键的记录,以便将其输出给用户。

有什么办法可以做ON DUPLICATE INSERT吗?如果有帮助,我正在尝试进行批量插入。


阅读 184

收藏
2021-03-23

共1个答案

小编典典

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

您可以通过两种自定义/替代方式来实现此目的:

  1. 使用stored procedure对此问题的可接受答案中概述的:将MySQL ON DUPLICATE KEY插入到审计表或日志表中

  2. 创建一个triggerINSERT您的表的所有内容记录到另一个表中,并在充满“日志”的表中查询是否有重复项。

与此类似的东西应该起作用:

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;
2021-03-23