事務隔離超通俗好懂的的講解
按照隔離的級別由低到高,越高的隔離,效率越差
0)、DEFAULT 默認隔離級別,由數據庫的數據隔離級別確定隔離級別
1)、READ_UNCOMMIYTTED 都未提交的 級別最低
允許別的事務,去讀取這個事務為提交之前的數據
缺點:可能會造成臟讀、幻讀、不可重復讀。
例子講解:店家對1000元商品進行降價500處理,數據更改,但未提交事務;
然后你查到降價將貨物並提交訂單; 可是商家由於操作異常,數據回滾,返回原價格1000;
這樣,在店家那邊是沒有操作成功的,可是在你這里卻得到了降價貨物訂單。
可理解為:外層更改價格的事務拉長執行,在執行之中出現提交訂單的事情,你讀了別人正在處理的數據。
2)、READ_COMMITTED 讀已提交級別
案例講解:你原本查詢商品價格為500,第二次為了證明真的降價了再查卻發現並沒有降價。
缺點:兩次讀的都是真的(不臟讀) 可是卻存在不可重復
可以理解為: 你兩次查詢為一次事務,將此事務拉長;
在此事務中間,有更改價格的操作,可能執行了多次,可是在這個多次執行修改中你無法插進去查一次;
只能等他更改完(中間事務結束)才能進行下一次查詢,你讀的期間別人插進來對數據操作了。
兩件事務出現了交集。
3)、REPEATABLE_READ 可重復讀 事務是多次讀取,得到的相同的值。
缺點: 會出現幻讀
即該事務執行期間,不允許其他事務對該事務數據進行操作,保證該事物中多次對數據的查詢結果一致。
就是你多次查詢的這個事務包含多條數據,為了保證讀取的一致性,可重復讀(REPEATABLE_READ)將使用的數據鎖起來不讓別人用。
4)、SERIALIZABLE 串行化讀 將事務排序,逐個執行事務提交了之后才會繼續執行下一個事務。
缺點:都隔離開了,效率慢
就是上面的可重復讀(REPEATABLE_READ)是將使用的數據范圍鎖起來不讓別人用,而這里是將涉及數據的表全都鎖起來,不允許別人操作。
這個事務的執行中,別的事務連在旁邊看的機會都沒有,完全不會有影響,你讀的時候別人看不到,隔離開,單獨執行。
整個事務排隊執行
本文為個人學習總結,可能會存在一些理解錯誤,或誤差,還請路過各位指點批評。