插入数据时报出DuplicateKeyException异常解决

1.今天我向数据库插入一条数据时出现了如下图的报错异常

exception1.jpg

2对于上面的错误我百思不得其解,虽然我的日志出现的了错误,但是数据竟然写入到了数据库中,我查了很多的博客,终于解决了这个问题.

3.解决办法

捕获异常,适用于需要对异常处理的程序,如在进行入库的操作上进行捕获异常.

  try{
            // 入库操作
            inset into ...
        }catch (DuplicateKeyException e){
            // 返回响应信息或或略
        }

4.原因

根据报错信息得知,这个错误是因为相同主键重复插入导致的
想到我的业务逻辑是:实时同步数据库(A库主数据,实时同步到B库)
1.实时接收A库的变化,一有变化就接收binlog;
2.根据binlog的主键,先查询B库有没有这条数据,有就修改,没有就插入,
问题就在第二步,如果并发极高,两条相同的binlog同时过来,
第一条来了先查询B库,没有发现这条数据,执行插入操作,正常,
就在此时,第二条binlog也来了,此时第一条还没有插入成功,所以此时查询B库,结果还是没有这条数据,
然后就执行插入操作,
此时其实B库中是已经插入这条数据的,所以第二次插入就会报错,相同主键重复插入

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容