MySql - 重复键插入

MySql - ON DUPLICATE KEY INSERT(MySql - 重复键插入)
本文介绍了MySql - 重复键插入的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I understand that there exists INSERT IGNORE and INSERT ... ON DUPLICATE KEY UPDATE. However, when there is a duplicate key, I'd like to do a INSERT to a temporary table to keep a record of the unique key that has been violated, so that I can output it to the user.

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

Is there any way I can do a ON DUPLICATE INSERT? If it helps, I'm trying to do a bulk insert.

推荐答案

使用 ON DUPLICATE KEY UPDATE,您无法插入另一个表 - 也没有可用的替代函数.

With ON DUPLICATE KEY UPDATE, you cannot insert into another table - nor is there an alternative function available.

您可以通过两种自定义/替代方式来完成此操作:

Two custom/alternative ways you can accomplish this:

  1. 使用 存储过程 如该问题的公认答案中所述:MySQL ON DUPLICATE KEY 插入审计或日志表

创建一个触发器 将您的表的每个 INSERT 记录到另一个表中,并在充满日志"的表中查询任何重复项.

Creating a trigger that logged every INSERT for your table into another table and querying the table full of "logs" for any duplicates.

类似的东西应该可以工作:

Something similar to this should work:

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;
|

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

To get a list of the duplicates in the table, you could us:

SELECT id FROM insert_logs HAVING COUNT(id) > 1 GROUP BY id;

这篇关于MySql - 重复键插入的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

Execute complex raw SQL query in EF6(在EF6中执行复杂的原始SQL查询)
Hibernate reactive No Vert.x context active in aws rds(AWS RDS中的休眠反应性非Vert.x上下文处于活动状态)
Bulk insert with mysql2 and NodeJs throws 500(使用mysql2和NodeJS的大容量插入抛出500)
Flask + PyMySQL giving error no attribute #39;settimeout#39;(FlASK+PyMySQL给出错误,没有属性#39;setTimeout#39;)
auto_increment column for a group of rows?(一组行的AUTO_INCREMENT列?)
Sort by ID DESC(按ID代码排序)