记一个mysql死锁问题,在并发情况下导致的数据库更新超时

发布时间 2023-09-19 15:47:43作者: 烟花火的人生

1、问题:

在执行mysql数据库更新操作,根据条件更新其中一列的值,具体的更新语句类似如下:

update people set name = 'zhangsan' where id = 1 a  and age = 24;

但是在Java中使用

parallelStream().foreach(a->{

//sql更新操作

})

并发流就会出现问题,导致有的更新会失败,报如下错误:

MySQLTransactionRollbackException: Lock wait timeout exceeded; try restarting transaction

2、解决:

主要是在并发流执行过程中,sql根据条件进行更新会对表中的行进行锁定,导致出现死锁,而死锁就会导致后边再来的更新语句无法获取到锁进行执行而超时,所以遇到更新的语句时,还是需要按顺序就行更新,不要使用并发流