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库中是已经插入这条数据的,所以第二次插入就会报错,相同主键重复插入