對不同隔離級別的理解

以下是我個人的理解,有不對的地方,還望博友指出哈。
在數據庫中,有4種不同的隔離級別供我們選擇,分別是read uncommited,read commited,repeatable read,serializable
我來依依解釋這四種級別
第一個,read uncommited,從名字上看,說的是,可以讀沒有提交的數據,那麼這個顯然是有很大的問題的,例如,我可以讀還沒有提交,但是已經更新或者插入或者刪除的數據,但是當某個時刻(還在read的事務內)以上這些操作都rollback了,那麼,讀出來的數據可能現在已經不是最新的狀態了,這樣就造成了髒讀,這顯然是不能接受的,所以,這個級別一般項目中是不會選擇的。讀取的交易不會阻止其它的交易,一個未COMMIT的交易會阻止其它寫入的交易。

第二個,read commited,這個意思是,一個事務讀的信息都是已經commited了的,讀不到沒有commited的,這樣在讀取一次時,不會造成髒讀,但是這個有個問題,就是如果我在讀取一次呢,這個時候如果有另外一個事務,這個時候對讀取的數據進行了一些操作,並且提交了,那麼就很可能造成,第一次讀和第二次讀的數據不一致的情況,這就是所謂的,不可以重複讀,但是這個級別至少是可以保證它不會髒讀。讀取的交易不會阻止其它的交易,一個未COMMIT的交易會阻止其它所有的交易。
第三個,repeatable read,意思是說,可以重複讀,那麼這種的隔離級別要求,在讀取數據的時候,不允許在有對讀取數據進行寫入,那這個時候,就可以避免重複讀,讀取的交易不會阻止其它讀取的交易,但會阻止其它寫入的交易,而寫入的交易會阻止所有其它的交易。但是這個時候,我可以對這條數據進行刪除,那麼這個時候,就可能產生幻讀,我實際上是讀對了,但是由於後續的一些操作,導致我讀出來的數據有問題,就是幻讀。
最後一個serializable,這個從字面上解釋,就是說的,串行化,也就是說,每一個事務的開始,都必須在前一個事務結束後執行,他們是串行的,不是並行的,那麼這個時候,上面所有的問題都可以解決,不會造成髒讀,重複讀,幻讀

發佈了44 篇原創文章 · 獲贊 4 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章