首頁  >  文章  >  資料庫  >  mysql有幾種隔離級別

mysql有幾種隔離級別

青灯夜游
青灯夜游原創
2019-03-01 16:57:2278018瀏覽

mysql有4種隔離等級:1、讀取未提交內容;在該隔離等級中,所有交易都可以看到其他未提交交易的執行結果。 2、讀取提交內容;一個事務提交之後,它修改的資料才會被別的事物看到。 3.可重複讀取;一個事務執行過程中看到的數據,總是和這個事務開啟時看到的數據是一致的。 4.可串行化;透過強制事務排序,使之不可能相互衝突,從而解決幻讀問題。

mysql有幾種隔離級別

本教學操作環境: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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn