【发布时间】: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...为起点 -
我明白了,我会检查它并采取必要的措施来防止它发生。感谢您的意见。
标签: mysql spring-boot