Mysql &Oracle隔離級別

MySQL 四大隔離級別(從低到高)
讀未提交(Read Uncommitted)
讀已提交(Read Committed)
可重復讀(Repeatable Read)
串行化(Serializable)

1. 讀未提交(Read Uncommitted)

一個事務能讀到另一個事務未提交的數(shù)據(jù)
問題:臟讀
實際:基本不用

2. 讀已提交(Read Committed)

只能讀到別的事務已經(jīng)提交的數(shù)據(jù)
解決:臟讀
問題:不可重復讀(同一事務內(nèi)兩次查詢結果不一樣)
實際:Oracle、SQL Server 默認

3. 可重復讀(Repeatable Read)默認

同一個事務里,多次讀取結果一致
解決:臟讀、不可重復讀
問題:幻讀(InnoDB 靠 MVCC 很大程度避免了幻讀)
實際:MySQL InnoDB 默認級別

4. 串行化(Serializable)

事務排隊執(zhí)行,完全串行
解決所有問題:臟讀、不可重復讀、幻讀
問題:性能極差,并發(fā)基本廢掉
實際:極少用,只有強一致場景才用

如何使用

# 當前會話級別(只對本次連接生效,斷開就沒)
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
#全局級別(對新連接生效,已連接的不變)
SET GLOBAL TRANSACTION ISOLATION LEVEL READ COMMITTED;
#mysqld
transaction-isolation = READ-COMMITTED

MySQL 默認:可重復讀(RR),靠 MVCC 實現(xiàn)
Oracle 默認:讀已提交(RC),不支持真正的 RR
兩者都支持:讀未提交、讀已提交、串行化
Oracle 設 REPEATABLE READ 等價于 SERIALIZABLE

隔離級別和悲樂鎖的關系

隔離級別是目標,悲觀鎖、樂觀鎖是實現(xiàn)這個目標的兩種方式。


image.png
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容