事務的回滾和不提交的區別

當出現異常,事務沒有提交,不回滾有影響嗎?


1.

在同一事務條件下,回滾和不提交,表現是一樣的
但是還有些差別


事務處理,是將操作事件交給數據庫(模擬)運行,直到commit操作,才使得修改實際產生效果,你可以看做是未提交事務都是處於一個臨時庫中進行
回滾是對於同一個事務,如果產生了錯誤,那麼取消這個臨時庫中的操作,不對實際數據產生影響


最主要的區別在於,如果不回滾,這些臨時操作會持續到這個個connection結束爲止,也就是雖然你看不到,但是臨時庫的操作依然存在,而回滾是即時生效,其實都是回滾了,只是時間點的不一樣


2.

我說你在開玩笑吧。沒有提交事務並不代表你對數據庫的改變不存在,如果是髒讀的隔離層級你修改數據到提交完成前的變更其他訪問者也是可以看到的。只有你提交後這部分修改才確認不會變更而已,哪怕設定了其他隔離級別也可以看到了。


如果你不回滾,那麼線程就停在哪裏擱着?製造出數據庫死鏈放着不管直到數據庫認爲這個連接超時自動斷開並自動回滾?


ISOLATION_READ_UNCOMMITTED:允許讀取其他併發事務還未提交的更新,會導致事務之間的3個缺陷發生,這是速度最快的一個隔離級別,但同 時它的隔離級別也是最低

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章