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