問題描述:
當我插入一條記錄時,在調用save方法的時候出現了異常(記錄重復了),導致了后面的commit語句不能執行了。這時我在數據庫中刪除重復記錄時發現該表已經被鎖上了。即出現錯誤。但過了一會再次執行delete,就能成功刪除記錄了。
原因分析:
由於commit語句沒有執行到,即事務沒有提交成功,表還是被鎖着的。只能等鎖超時了,才能再次執行delete等操作。
解決辦法:
1.遇到問題后可以kill掉對應的線程再次執行delete等操作。
2.為避免問題出現,可以開啟mysql中的autocommit功能,將其值set為1。但這樣的話會影響性能,因為執行1000條sql語句則要commit1000次。關閉的話,通過程序控制,1000條sql語句可以只commit一次。
3.不去改autocommit的話,也可以將commit放在finally語句塊中。保證一定執行commit方法。