将条目从 poll 复制到 poll_logs 时重复键条目

Posted

技术标签:

【中文标题】将条目从 poll 复制到 poll_logs 时重复键条目【英文标题】:duplicate key entry when copying entry from poll to poll_logs 【发布时间】:2022-01-14 20:17:45 【问题描述】:

我有一个 Spring Boot 项目,当通过批处理处理条目时,它将轮询条目传输到 poll_logs。这工作正常,但是当批处理作业重新启动时,会发生这种情况:

嵌套异常是 java.sql.SQLIntegrityConstraintViolationException: Duplicate entry '2' for key 'PRIMARY'

我只是想知道发生这种情况的原因。是因为 Spring 和 mysql 之间发生了神秘事件还是我们的错误?

poll 表的 id 具有 auto_increment 属性,而 poll_logs 的 id 则没有。 此外,这里是将条目传输到 poll_logs 的查询

复制投票项目

INSERT INTO poll_log SELECT * FROM poll WHERE id = <id>

删除投票项目

DELETE FROM poll WHERE id = <id>

【问题讨论】:

这里没什么神秘的。当您的批处理作业重新开始从poll 复制已存在于poll_logs 中的数据时。您需要确保不会发生这种情况,或者使用INSERT 的变体而不是处理它。以INSERT IGNOREINSERT...ON DUPLICATE KEY... 为起点 我明白了,我会检查它并采取必要的措施来防止它发生。感谢您的意见。 【参考方案1】:

您正在尝试插入已存在于 poll_log 中的投票。

添加一个子句来忽略已经存在的投票。

INSERT INTO poll_log SELECT * FROM poll WHERE id = <id> AND NOT EXISTS (SELECT 1 FROM poll_log pl WHERE pl.id = poll.id)

【讨论】:

以上是关于将条目从 poll 复制到 poll_logs 时重复键条目的主要内容,如果未能解决你的问题,请参考以下文章

sql 这将从一个员工ID和工具复制数据库中的所有条目到另一个。用于在员工h时复制IER记录

C# 将 zip 条目从一个 zipFile 导出到另一个 zipFile

linux驱动之poll操作

如何使用可重复对象中的嵌套必填字段将数据从一个表复制到另一个表

poll 从应用层到内核实现解析

Sharepoint Online / 365 - 从列表视图中删除多个附加列和显示条目的“查看条目”