在sql標準中定義了四種隔離級別,每一種隔離級別都定義了乙個事務中所作的修改,哪些在事務和事務間是可見的,哪些是不可見的,較低階別的隔離通常是可以執行更高的併發,系統的開銷也更低。
簡單介紹一下四種隔離級別:
read uncommited(未提交讀):
在此級別中,事務的修改,即使沒有提交,對於其他事務也是可見的。事務可以讀取未提交的資料,這也被稱為髒讀。
示例:在資料庫中存在資料a = 1 , b = 2, 現有兩個事務t1,t2.
t1 需要執行的是 a = b+1 , t2 需要執行的是b = a+2
根據事務的原子性,我們需要將事務的操作進行拆分。如圖:
read commited(提交讀)
乙個事務從開始到提交之前,所作的任何修改對於其他事務是不可見的。 這個級別也叫做不可重複讀(norepeatable read)。
repeatable read (可重複讀)mysql預設事務隔離級別
該級別保證了在同乙個事務中多次讀取同樣的記錄的結果是一致的。但是理論上,可重複讀隔離界別還是無法解決另乙個幻讀(phantom read)問題。所謂幻讀,指的是當某個事務在讀取某個範圍內的記錄時,另乙個事務又在該範圍內插入了新的記錄,當之前的事務在此讀取該範圍內的記錄時,會產生幻行。innodb儲存引擎通過多版本控併發控制解決了幻讀問題。
serializable (可序列化)
此級別為最高的隔離級別。它通過強制事務序列執行,避免了前面的歡讀問題。他會在讀取的每一行資料上都加鎖,所以坑你導致大量的超市和鎖競爭問題。實際應用中也很少使用到這個隔離級別。
mysql隔離級別 MySQL 事務隔離級別
mysql innodb所提供的事務滿足acid的要求,事務是通過事務日誌中的redo log和undo log來實現原子性 undo log 一致性 undo log 永續性 redo log 事務通過鎖機制實現隔離性。1 事務隔離級別與實現read uncommitted 讀未提交 read c...
MySQL事務隔離級別
sql標準定義了4類隔離級別,包括了一些具體規則,用來限定事務內外的哪些改變是可見的,哪些是不可見的。低階別的隔離級一般支援更高的 併發處理,並擁有更低的系統開銷。read uncommitted 讀取未提交內容 在該隔離級別,所有事務都可以看到其他未提交事務的執行結果。本隔離級別很少用於實際應用,...
Mysql 事務隔離級別
mysql 5.5預設儲存引擎 表型別 使用的是innodb,它是支援acid特性的 acid,指資料庫的原子性 atomicity 一致性 consistency 隔離性 isolation 永續性 durability 乙個支援事務 transaction 的資料庫系統,必需要具有這四種特性,否...