oxox333
2020-01-16 15:23
采纳率: 57.1%
浏览 2.2k
已采纳

Java mybatis更新(update)数据时,偶尔会新插入一条重复的一模一样的数据!

前几天在公司写代码的时候遇到了一个奇怪的问题!! 因为公司的项目涉及隐私,所以不能贴代码,我口述一下:

因为我的表没有设计主键,所以通过mybatis逆向工程生成mapper文件的时候,没有update功能,自己手写了一个.但是在后来测试的时候发现,偶尔在update数据的时候,会多出一条一模一样的重复数据,有时候甚至多出三四条,五六条.但是这种情况不是每次都有,偶尔跑个几百条会出现这种情况,我用debug一个个定位原因的时候又没有出现!!

可以肯定的是,一定是我update的时候出现的问题.因为后来我这个bug解决不掉,只能换一种方式:把update改成先delete原来的旧数据,再insert新数据,就不会出现这种情况..

我反复看了xml里面我的sql语句,没有什么问题...需要各位大神帮忙想想,到底是什么问题?

如果能真正帮我解决这个问题,还可以加悬赏!!!谢谢!!!!

我的业务功能主要就是做了一个定时任务,每隔一段时间跑一次,获取车辆信息,然后根据车牌更新数据

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

7条回答 默认 最新

  • Kevin.Y.K 2020-01-16 15:38
    已采纳

    你没有主键,我不知道你是通过什么条件来update的,肯定是有一个唯一的字段标识。单纯的update是不会产生新数据的,只有可能是你的update方法里面判断记录如果存在就update,不存在就insert,才会出现你说的情况。
    当你的定时任务出现重合执行的时候就会出现数据重复的情况,任务A插入数据a后还在继续执行,但是事务未提交,任务B又开始执行了,查询数据a是查不到的,所以插入一个新数据a2,当两个任务都执行完了,数据库里就有相同的记录。

    点赞 打赏 评论
  • weixin_45936171 2020-01-16 15:41

    哇,你这个有点空泛了。你起码把update的SQL贴出来,XML文件大概搞个几行。然后什么数据库。

    点赞 打赏 评论
  • 杨园亮 2020-01-16 15:41

    没有主键你是根据什么进行update的,是不是你的uodate条件是重复的,所以修改了别的数据,造成重复数据的假象

    点赞 打赏 评论
  • 「已注销」 2020-01-16 16:00

    首先需要明确一点,update语句只会修改内容,不会插入一条新数据。其次你应该着重看看你的update语句的where条件,多出一模一样的东西肯定是where条件限定不对

    点赞 打赏 评论
  • Arthur_ZBY 2020-01-16 16:26

    表中数据update前后的总数有没有变化?如果总数一样的话,就是sql语句修改条件的问题了

    点赞 打赏 评论
  • 世纪怪咖 2020-01-16 16:55

    没有主键,应该就是update的条件不唯一,查出来的数据是多条,然后update了多条,现象就是出现了重复数据,你现在先删除应该是删了多条,然后插入的,可以看下数据量的情况,比如update之后出现重复数据的时候比update之前是不是数据量有变化

    点赞 打赏 评论
  • weixin_49856443 2021-04-15 14:55

    建议定时任务加锁,怀疑某一次定时任务方法没执行完。下一个轮询之后新的进程进来了导致的

    点赞 打赏 评论

相关推荐 更多相似问题