mysql事物隔離級別詳解(超通俗易懂)


mysql有四種隔離級別

一,讀未提交(read uncommitted)

二,讀已提交(read committed)

三,可重復讀

四,序列化

 

 

一,讀未提交

  你在修改表中數據的時候,你可以看到另一個人沒有提交的數據。這是一種安全級別最低的隔離級別,目前這種級別只是理論存在,因為目前基本沒有數據庫采用這種隔離方式,這種隔離級別會產生的問題就是dirty read(臟讀)

二,讀已提交(rc)

  很好理解,假如此時,你和另外一個人同時操作同一張表,有一條數據是id為1 姓名為小明的數據,此時另外一個人對這個數據修改為id為2 姓名為小紅(沒有提交前),你再次查詢得到的數據一直都是1 小明,而當這個人修改完后輸入commit提交后,此時你在查詢時,數據則會變為2 小紅,這就是讀已提交,意思其實和字面意思一樣,只能讀取當已提交的數據。這個隔離級別解決了臟讀的問題,但是缺點就是不可重復讀

三 可重復讀(rr)

  這是mysql的默認隔離級別,與第二種不同的是,此時如果和你操作一張表的另一個人commit后,你select查詢后依舊是1 小明,只有當你自己commit之后,當前事務完全結束后,你才可以看到修改后的值,這種隔離級別解決了不可重復讀的問題,但是出現了一種新的問題,就是幻讀,什么是幻讀呢?舉個例子,當你查詢某條數據時,可能顯示的是1 小明,但是此時可能有個人正好修改好了這條數據,當你提交后再次查詢時,你會發現變成了2 小紅,這個時候你可能會覺得不對啊,剛才我剛查詢的時候明明不是2 小紅啊,明明是1小明啊,是我產生幻覺了嗎?這就是幻讀。

四 序列化

  最安全的默認隔離級別,但是並不支持並發,相當於單線程,不允許並發操作數據庫,事務開啟后,只允許一個人進行操作,直到提交后下一個人才可以進入。


免責聲明!

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



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