mysql的事物隔离级别
生活随笔
收集整理的這篇文章主要介紹了
mysql的事物隔离级别
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
我們對于InnoDB這個數據存儲引擎,他最大的特點是支持了事務,還記得嗎,事務除了具有ACID的四大特性以外,事務是不是還有個隔離級別,還記得是什么時候講過,講Spring的時候,Spring的事務控制有個Isolation,還記得嗎就是什么意思呢,如果你有多個并發的事務,同時操作一個數據,如果你對這個事務沒有很好地隔離級別,那么就可以能會出現臟讀,虛讀,對吧,不可重復讀,丟失第一類更新,丟失第二類更新的現象,總而言之,這個數據是有問題的,所以說在定義事務標準的時候,除了那四大原則以外,事務的特點已經把隔離級別遞出來了,也就是說,你數據庫產品,如果想要支持事務,你應該支持這4種隔離級別,這樣就可以解決常見的數據讀取的問題,比如四大隔離級別有哪些來著,能回憶起來幾個,Read-uncommit,讀未提交,既然有讀未提交,就有讀已提交,還有一個Read-Commit,還有一個叫Repeatable-Read,最后一個是什么,Read-Seriable,序列化,其實在這四個隔離級別當中,Serializable是事務最安全的,為什么,我記得當時還舉了這么個例子,我又一張銀行卡,恰巧公司這個時候給我開工資,然后我又拿這張卡去取錢,同時在這個時間點兩個事務操作同一個賬戶,就會有這樣的問題,對吧,所以在定義事務特性的時候,就已經把隔離級別定義出來了,具備一種什么什么的隔離級別,能夠解決什么問題,那么我們剛才所說的4個隔離級別,其實就可以解決臟讀,虛讀,不可重復讀的一系列問題,只是級別的順序影響了他的事務隔離級別的嚴謹性,比如最嚴謹的是誰啊,就是Serializable,哪有人說Serializable這么嚴謹了,數據為什么不用一個Serializable就行了,沒錯,數據越嚴謹數據越安全,但是會嚴重的影響效率和性能,咱們在講數據庫的時候,比如92標準下,這點相對于我們覺得比較高達上的ORACLE,其實ORACLE對于事物的隔離級別就支持兩種,一直叫做Serializable,一種叫做Repeatable-Read,剩余的讀已提交,讀未提交,ORACLE不支持,所以從這一點來看,ORACLE的默認級別就是Repeatable-Read,而MYSQL的默認隔離級別是Read-Commit,其實你會發現,大多數的關系型的數據庫的默認隔離級別是都是Repeatable-Read,但是MYSQL默認的是讀已提交,Read-Commit,能不能記住這四個隔離級別
事務的隔離級別:1. read-committed : 讀已提交 (是MSYQL的默認隔離級別)2. read uncommitted : 讀未提交3. repeatable read (是Oracle的默認隔離級別)4. Serializable 就是四種隔離級別,然后repeatable read,是Oracle的默認隔離級別,讀已提交是MSYQL的默認隔離級別,所以你要依賴數據庫做隔離級別,其實它控制的顆粒度是比較粗的,除非用數據庫的Serializable,但是你把Serializable改了之后,就會降低其他的性能,所以這個隔離級別真的去做,還不是去依賴數據庫的隔離級別,而是依賴我們Spring的傳播行為,Spring的事務隔離級別最好的是他可以把隔離級別細化到方法上,也就是僅限于這樣的一個方法,受這樣的事務隔離級別,我們不是要配傳播行為嗎,required,后面有一個Isolation,那個不就是配隔離級別的嗎,所以用Spring來解決事務隔離級別方式更加細粒一些,那就借著這個機會給大家說一下,如果有人問你MYSQL里面的隔離級別,說不出來,其實這塊是可以說出來的,沒有太大的問題,但是你要看每一個隔離級別單獨的解決什么樣的問題,臟讀,虛讀,這些東西,那也不復雜,你到網上搜一遍,不過多介紹了
?
總結
以上是生活随笔為你收集整理的mysql的事物隔离级别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LocalDateTime - Java
- 下一篇: mysql的索引介绍_1