mysql死鎖 查詢,MySQL死鎖套路之唯一索引下批量插入順序不一致?
這個代碼,只要條件滿足,肯定會死鎖。 如果有2個線程同時做批量更新, 第一個線程更新了id=1的數(shù)據(jù), 第二個線程更新了id=2的數(shù)據(jù)。 這個時候,第一個線程準(zhǔn)備更新id=2的數(shù)據(jù),但線程2所持連接未提交,無法取得數(shù)據(jù)庫中該id=2的行鎖。 同時第二個線程準(zhǔn)備更新id=1的數(shù)據(jù),也因為無法取得id=1的行鎖,就造成了死鎖。 解決辦法的就是:如果更新條件的,比如說是主鍵,則根據(jù)主鍵排序之后批量做更新。 如果更新條件不是主鍵,可以那么單線程處理。 也可以通過單條語句執(zhí)行來避免死鎖。 不過,不使用批量性能太低了,你還是需要結(jié)合你的業(yè)務(wù)來調(diào)整代碼避免死鎖