mysql有4種隔離等級:1、讀取未提交內容;在該隔離等級中,所有交易都可以看到其他未提交交易的執行結果。 2、讀取提交內容;一個事務提交之後,它修改的資料才會被別的事物看到。 3.可重複讀取;一個事務執行過程中看到的數據,總是和這個事務開啟時看到的數據是一致的。 4.可串行化;透過強制事務排序,使之不可能相互衝突,從而解決幻讀問題。
本教學操作環境:windows7系統、mysql8版本、Dell G3電腦。
一個事務具有ACID特性,也就是(Atomicity、Consistency、Isolation、Durability,即原子性、一致性、隔離性、持久性)。
Mysql的四個隔離級別
SQL標準定義了4類隔離級別,包括了一些具體規則,用來限定事務內外的哪些改變是可見的,哪些是看不見的。低階的隔離級一般支援更高的並發處理,並擁有更低的系統開銷。 【影片教學推薦:Mysql教學】
1、讀取未提交內容(read-uncommitted)
在該隔離等級中,所有事務都可以看到其他未提交交易的執行結果。本隔離等級很少用於實際應用,因為它的效能也不比其他等級好多少。
此隔離等級會出現的問題是:髒讀(Dirty Read),也就是讀取到了未提交的資料。
2、讀取提交內容(read-committed)
這是大多數資料庫系統的預設隔離等級(但不是MySQL預設的)。它滿足了隔離的簡單定義:一個交易只能看見已經提交事務所所做的改變。
該隔離等級會出現的問題是:不可重複讀取(Nonrepeatable Read),即不可重複讀取意味著我們在同一個事務中執行完全相同的select語句時可能看到不一樣的結果。
導致這種情況的原因可能有:
1)、有一個交叉的事務有新的commit,導致了資料的改變;
2)、一個資料庫被多個實例操作時,相同交易的其他實例在該實例處理其間可能會有新的commit
3、可重複讀取(repeatable-read)
這是MySQL的預設事務隔離級別,它確保相同交易的多個實例在並發讀取資料時,會看到相同的資料行。
不過理論上,這會導致另一個棘手的問題:幻讀 (Phantom Read)。
簡單的說,幻讀指當使用者讀取某一範圍的資料行時,另一個事務又在該範圍內插入了新行,當使用者再讀取該範圍的資料行時,會發現有新的“幻影” 行。
InnoDB和Falcon儲存引擎透過多版本並發控制(MVCC,Multiversion Concurrency Control)機制解決了這個問題。
4、可串行化(serializable)
這是最高的隔離級別,它透過強制事務排序,使其不可能相互衝突,從而解決幻讀問題。簡言之,它是在每個讀取的資料行上加上共享鎖定。在這個級別,可能導致大量的超時現象和鎖定競爭。
在這個級別,可能導致大量的超時現象和鎖定競爭。
推薦學習:mysql影片教學
#以上是mysql有幾種隔離級別的詳細內容。更多資訊請關注PHP中文網其他相關文章!