mysql中,執行delete語句時出現Lock wait timeout exceeded問題


問題描述:

當我插入一條記錄時,在調用save方法的時候出現了異常(記錄重復了),導致了后面的commit語句不能執行了。這時我在數據庫中刪除重復記錄時發現該表已經被鎖上了。即出現錯誤。但過了一會再次執行delete,就能成功刪除記錄了。

原因分析:

由於commit語句沒有執行到,即事務沒有提交成功,表還是被鎖着的。只能等鎖超時了,才能再次執行delete等操作。

解決辦法:

1.遇到問題后可以kill掉對應的線程再次執行delete等操作。

2.為避免問題出現,可以開啟mysql中的autocommit功能,將其值set為1。但這樣的話會影響性能,因為執行1000條sql語句則要commit1000次。關閉的話,通過程序控制,1000條sql語句可以只commit一次。

3.不去改autocommit的話,也可以將commit放在finally語句塊中。保證一定執行commit方法。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM