将条目从 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 IGNORE
或INSERT...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