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