記一個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根據條件進行更新會對表中的行進行鎖定,導致出現死鎖,而死鎖就會導致后邊再來的更新語句無法獲取到鎖進行執行而超時,所以遇到更新的語句時,還是需要按順序就行更新,不要使用并發流

浙公網安備 33010602011771號