MySql - ON DUPLICATE KEY INSERT

mat*_*att 8 mysql sql insert on-duplicate-key

我明白存在INSERT IGNOREINSERT ... ON DUPLICATE KEY UPDATE.但是,当存在重复键时,我想对INSERT临时表执行操作以保留已违反的唯一键的记录,以便我可以将其输出给用户.

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

new*_*rey 8

有了ON DUPLICATE KEY UPDATE,你不能插入另一个表 - 也没有可用的替代功能.

两种自定义/替代方法可以实现此目的:

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

  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;
|
Run Code Online (Sandbox Code Playgroud)

要获取表格中重复项的列表,您可以:

SELECT id FROM insert_logs HAVING COUNT(id) > 1 GROUP BY id;
Run Code Online (Sandbox Code Playgroud)