当前位置: 首页 > 面试题库 >

MySql-在重复键插入上

赫连心思
2023-03-14
问题内容

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

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


问题答案:

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


 类似资料:
  • 问题内容: 我有一张桌子,就是PK。当我插入行时,将有重复的键,并且我需要总结三个统计信息。我在Java中对PreparedStatement使用以下查询: 是否有更简洁的查询来实现?因为我简化了查询,所以那里有十多个统计信息。 问题答案:

  • 我有以下结构 和3个查询 解释我为什么只有第一个作品???? 我一辈子都在用第三个!

  • 我定义了2个具有单向一对多关系的实体: 在command.class中: 在StockDetails.class中: null

  • 我想知道如何一次将数据批量插入MySQL数据库,我不知道怎么做。根据mvc单击提交按钮时插入表数据。 和来自另一个表我想将所有数据添加到另一个表中,和是只读的 检查这张照片 milkload jsp页面 Milkload模型类 MilkLoadDAO类

  • 好吧,问题不是关于如何返回ID,而是更像是如何跳过它...我有一种情况,我使用last_insert_id()获取最后插入行的id,但如果没有插入行,我想得到一个零。问题如下: < li >我插入...更新一些记录:由于这些行是新插入的,所以返回所有id < li >然后我重复该过程:这次不返回id。耶!这正是我想要的 < li >我更改了一个列值并重复该过程:但现在返回的是我更改了列值的行的ID

  • 问题内容: 我有一个喜欢的表,其中包含一些字段,例如login_id,driver_id(一个login_id可能有很多driver_id)。然后我正在使用批量更新,没有检查表中是否存在driver_id。 输入数据将是驱动程序ID的集合,如果相关的login_id已经存在相同的ID,则需要跳过驱动程序ID的插入。因此,将插入新的ID,而不会插入其他ID 我可以用mysql做些什么,表中需要做哪些