1. 程式人生 > >事務隔離級別區分,未提交讀,提交讀,可重復讀

事務隔離級別區分,未提交讀,提交讀,可重復讀

行修改 返回 數據庫 數據隔離 read 執行 strong 操作 復讀

事務隔離超通俗好懂的的講解

按照隔離的級別由低到高,越高的隔離,效率越差

  0)、DEFAULT 默認隔離級別,由數據庫的數據隔離級別確定隔離級別
1)、READ_UNCOMMIYTTED 都未提交的 級別最低
允許別的事務,去讀取這個事務為提交之前的數據
缺點:可能會造成臟讀、幻讀、不可重復讀。
例子講解:店家對1000元商品進行降價500處理,數據更改,但未提交事務;
然後你查到降價將貨物並提交訂單; 可是商家由於操作異常,數據回滾,返回原價格1000;
這樣,在店家那邊是沒有操作成功的,可是在你這裏卻得到了降價貨物訂單。
可理解為:外層更改價格的事務拉長執行,在執行之中出現提交訂單的事情,你讀了別人正在處理的數據。



2)、READ_COMMITTED 讀已提交級別
案例講解:你原本查詢商品價格為500,第二次為了證明真的降價了再查卻發現並沒有降價。

   缺點:兩次讀的都是真的(不臟讀) 可是卻存在不可重復
可以理解為: 你兩次查詢為一次事務,將此事務拉長;
在此事務中間,有更改價格的操作,可能執行了多次,可是在這個多次執行修改中你無法插進去查一次;
只能等他更改完(中間事務結束)才能進行下一次查詢,你讀的期間別人插進來對數據操作了


      兩件事務出現了交集。

  3)、REPEATABLE_READ 可重復讀 事務是多次讀取,得到的相同的值。

   缺點: 會出現幻讀
即該事務執行期間,不允許其他事務對該事務數據進行操作,保證該事物中多次對數據的查詢結果一致。
  就是你多次查詢的這個事務包含多條數據,為了保證讀取的一致性,可重復讀(REPEATABLE_READ)將使用的數據鎖起來不讓別人用。

4)、SERIALIZABLE 串行化讀 將事務排序,逐個執行事務提交了之後才會繼續執行下一個事務。

   缺點:

都隔離開了,效率慢  
就是上面的可重復讀(REPEATABLE_READ)是將使用的數據範圍鎖起來不讓別人用,而這裏是將涉及數據的表全都鎖起來,不允許別人操作。
這個事務的執行中,別的事務連在旁邊看的機會都沒有,完全不會有影響,你讀的時候別人看不到,隔離開,單獨執行
     整個事務排隊執行

本文為個人學習總結,可能會存在一些理解錯誤,或誤差,還請路過各位指點批評。


事務隔離級別區分,未提交讀,提交讀,可重復讀