數據庫隔離級別

read uncommited? (讀未提交)

最低級別,可讀取未提交事物的數據,這會導致臟讀,比如:某時刻會話a修改了一個數據,但還未提交,此時會話b,讀取了該數據,這是,會話a回滾了事物,這就導致數據出現了不一致狀態,這就是臟讀!

read commited ? ?(提交讀)

避免了臟讀,但會導致不可重復讀,例如:某時刻會話a的一個事物里查詢一個數據,得到的數據是1,

這是會話b修改了該數據的值為2,并提交了,此時會話a的事物有要讀取該數據,這是的數據是2,就樣就出

現了同一個事務內,讀的結果不一樣,這就是不可重復讀。(oracle和ms-sql默認的等級都是這個)

repeatable read ?(可重復讀)

mysql innodb存儲引擎的默認事務隔離級別,解決了不可重復讀的問題,但可能會出現幻讀;幻讀就是當一個事務在讀取某一范圍數據行的過程中,另一個事務對數據進行了insert操作,當用戶再次讀取的時候,就會發現新的幻影行。對于幻讀,innodb 存儲引擎通過多版本并發控制(mvcc)有效解決了幻讀現象

SERIALIZABLE ? ? (可串行化)

最高隔離級別,對事務進行強制排序。使事務之間不產生沖突,從而解決幻讀現象,在這個級別下,數

據庫的并發能力大大受限,在serializable 下,每個讀的數據行都要加鎖。

總結:隔離級別越低,事務的并發能力越好,但也可能會損害數據的一致性。

隔離級別越高,事務的并發能力越差!

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容