mysql并发插入死锁_高并发下insert死锁 · Issue #ITUNR · baomidou/mybatis-plus - Gitee.com...
當(dāng)前使用版本(必須填寫清楚,否則不予處理)
springboot版本:2.0.3.RELEASE
mybatis版本:3.0.5
jdk:1.8
該問(wèn)題是怎么引起的?(最新版上已修復(fù)的會(huì)直接close掉)
public Result getExamSetByExamId(@RequestParam("useTime")String useTime,
@RequestParam("openId")String openId,
@RequestParam("score")String score,
@RequestParam("isPass")Integer isPass,
@RequestParam("resultCount")Integer resultCount,
@RequestParam("answer")String answer){
try{
List resultToday = resultEverydayService.findResultToday(openId);
if(!resultToday.isEmpty()){
return ResultUtils.error(0001,"該賬號(hào)已經(jīng)答過(guò)題,請(qǐng)勿重復(fù)提交");
}
ResultEveryday resultEveryday = new ResultEveryday();
resultEveryday.setScore(Integer.valueOf(score)).setOpenId(openId).
setIsPass(isPass).setUseTime(useTime).setResultCount(resultCount);
resultEverydayService.save(resultEveryday);
resultDetailsEveryDay(resultEveryday.getResultId(),answer);
return ResultUtils.success(resultEveryday.getResultId());
}catch (Exception e){
log.error(openId+",提交每日答題失敗,{}",e);
return ResultUtils.error(0001,"提交失敗");
}
}
數(shù)據(jù)庫(kù)操作有兩次,第一次是查詢
List resultToday = resultEverydayService.findResultToday(openId);
第二次是新增
resultEverydayService.save(resultEveryday);
操作的是同一張表,先查詢是否已經(jīng)有,沒(méi)有的話進(jìn)行新增
重現(xiàn)步驟
當(dāng)并發(fā)的時(shí)候出現(xiàn)此類錯(cuò)誤
報(bào)錯(cuò)信息
Error updating database. Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLTransactionRollbackException: Lock wait timeout exceeded; try restarting transaction
The error may involve com.mybatis.plus.mp.mapper.ResultEverydayMapper.insert-Inline
The error occurred while setting parameters
SQL: INSERT INTO mp_result_everyday ( open_id, use_time, is_pass, score, result_count ) VALUES ( ?, ?, ?, ?, ? )
Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLTransactionRollbackException: Lock wait timeout exceeded; try restarting transaction
; ]; Lock wait timeout exceeded; try restarting transaction; nested exception is com.mysql.jdbc.exceptions.jdbc4.MySQLTransactionRollbackException: Lock wait timeout exceeded; try restarting transaction
總結(jié)
以上是生活随笔為你收集整理的mysql并发插入死锁_高并发下insert死锁 · Issue #ITUNR · baomidou/mybatis-plus - Gitee.com...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: l源码安装mysql升级_[Linux]
- 下一篇: mysql数据库rpm包_MySQL 8