记一个mysql死锁问题,在并发情况下导致的数据库更新超时
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根据条件进行更新会对表中的行进行锁定,导致出现死锁,而死锁就会导致后边再来的更新语句无法获取到锁进行执行而超时,所以遇到更新的语句时,还是需要按顺序就行更新,不要使用并发流