Mysql 中四種隔離級別

2021-08-15 07:20:52 字數 1317 閱讀 2961

mysql 中四種隔離級別

mysql 中四種隔離級別分別是讀未提交、

讀已提交、可重複讀、序列化。

讀未提交(

read uncommitted

):未提交讀隔離級別也叫讀髒,就是事務可以讀取其它事務未提交的資料。例如:

如果乙個事務中對資料進行了更新,但事務還沒有提交,另乙個事務可以「看到

」該事務沒有提交的更新結果,這樣造成的問題就是,如果第乙個事務回滾,那麼,第二個事務在此之前所「看到

」的資料就是一筆髒資料。

讀已提交(

read committed

):在其它資料庫系統比如

sql server

預設的隔離級別就是提交讀,已提交讀隔離級別就是在事務未提交之前所做的修改其它事務是不可見的。

不可重複讀取是指同乙個事務在整個事務過程中對同一筆資料進行讀取,每次讀取結果都不同。如果事務

1在事務

2的更新操作之前讀取一次資料,在事務

2的更新操作之後再讀取同一筆資料一次,兩次結果是不同的,所以,

read uncommitted

也無法避免不可重複讀取的問題。

可重複讀(

repeatable read

):保證同乙個事務中的多次相同的查詢的結果是一致的,比如乙個事務一開始查詢了一條記錄然後過了幾秒鐘又執行了相同的查詢,保證兩次查詢的結果是相同的,可重複讀也是

mysql

的預設隔離級別。

幻讀是指同樣一筆查詢在整個事務過程中多次執行後,查詢所得的結果集是不一樣的。幻讀針對的是多筆記錄。在

read uncommitted

隔離級別下,

不管事務

2的插入操作是否提交,事務

1在插入操作之前和之後執行相同的查詢,取得的結果集是不同的,所以,

read uncommitted

同樣無法避免幻讀的問題。

可序列化(

serializable

):可序列化就是保證讀取的範圍內沒有新的資料插入,比如事務第一次查詢得到某個範圍的資料,第二次查詢也同樣得到了相同範圍的資料,中間沒有新的資料插入到該範圍中。 它是

最為嚴格的隔離級別,所有的事務操作都必須依次順序執行,可以避免其他隔離級別遇到的所有問題,是最為安全的隔離級別,

但同時也是效能最差的隔離級別,因為所有的事務在該隔離級別下都需要依次順序執行,所以,併發度下降,吞吐量上不去,效能自然就下來了。

上圖:

Mysql 中四種隔離級別

讀未提交 read uncommitted 未提交讀隔離級別也叫讀髒,就是事務可以讀取其它事務未提交的資料。讀已提交 read committed 在其它資料庫系統比如 sql server 預設的隔離級別就是提交讀,已提交讀隔離級別就是在事務未提交之前所做的修改其它事務是不可見的。可重複讀 rep...

MySQL四種隔離級別

在sql標準中定義了四種隔離級別,每一種級別都規定了乙個事務中所做的修改,哪些是在事務內和事務間可見的,哪些是不可見的。較低階別的隔離通常可以執行更高的併發,系統的開銷也更低。未提交讀 read uncommitted 在未提交讀級別,事務中的修改,即使沒有提交,對其他事務也都是可見的。事務可以讀取...

mysql四種隔離級別

髒讀 dirty reads 乙個事務正在對一條記錄做修改,在這個事務完成並提交前,這條記錄的資料就處於不一致狀態 這時另乙個事務也來讀取同一條記錄,如果不加控制,第二個事務讀取了這些 髒 資料,並據此做進一步的處理,就會產生未提交的資料依賴關係。這種現象被形象地叫做 髒讀 第乙個事務可能會回滾,第...