速記!資料庫的四種隔離級別

2021-09-14 05:13:52 字數 974 閱讀 4655

4種隔離級別(括號為快速記憶提示)

1、read uncommitted 讀未提交

描述:乙個事務對一行資料修改的過程中,

不允許,另乙個事務進行修改,

但允許,另乙個事務進行讀。

因此,本級別下,不會出現更新丟失,但會出現髒讀、不可重複讀。

(寫允許讀)

2、read committed 讀提交,oracle預設

描述:未提交的寫事務不允許其他事務訪問該行(不會出現髒讀);

讀取資料的事務允許其他事務訪問該行資料(會出現不可重複讀的情況,讀的時候進行寫)。

(寫禁止所有;讀正常)

3、repeatable read 重複讀,mysql預設

描述:讀事務禁止寫事務,允許讀事務;

因此不會出現同一事務兩次讀到不同的資料的情況(不可重複讀),

且,寫事務禁止其他一切事務。

(寫禁止所有,讀不允許寫)

4、serializable 序列化

描述:該級別要求所有事務都必須序列執行,因此能避免一切因併發引起的問題,但效率很低。

(所有事務序列)

事務併發執行會出現的問題:

一、更新丟失

當有兩個併發執行的事務,更新同一行資料,那麼有可能乙個事務會把另乙個事務的更新覆蓋掉。

當資料庫沒有加任何鎖操作的情況下會發生。

二、髒讀

乙個事務讀到另乙個尚未提交的事務中的資料。

該資料可能會被回滾從而失效。

如果第乙個事務拿著失效的資料去處理那就發生錯誤了。

三、不可重複讀

不可重複讀的含義:乙個事務對同一行資料讀了兩次,卻得到了不同的結果。它具體分為如下兩種情況:

1、虛讀:

在事務1兩次讀取同一記錄的過程中,事務2對該記錄進行了修改,從而事務1第二次讀到了不一樣的記錄。

2、幻讀:

事務1在兩次查詢的過程中,事務2對該錶進行了插入、刪除操作,從而事務1第二次查詢的結果發生了變化。

資料庫四種隔離級別

存在的問題 更新遺失。解決辦法就是下面的 可讀取未確認 寫事務阻止其他寫事務,避免了更新遺失。但是沒有阻止其他讀事務。存在的問題 髒讀。即讀取到不正確的資料,因為另乙個事務可能還沒提交最終資料,這個讀事務就讀取了中途的資料,這個資料可能是不正確的。解決辦法就是下面的 可讀取確認 寫事務會阻止其他讀寫...

資料庫四種隔離級別

零 沒有併發控制 存在的問題 更新遺失。解決辦法就是下面的 可讀取未確認 一 可讀取未確認 read uncommitted 寫事務阻止其他寫事務,避免了更新遺失。但是沒有阻止其他讀事務。存在的問題 髒讀。即讀取到不正確的資料,因為另乙個事務可能還沒提交最終資料,這個讀事務就讀取了中途的資料,這個資...

資料庫的四種隔離級別

序列化 serializable,sqlite預設模式 最高端別的隔離。兩個同時發生的事務100 隔離,每個事務有自己的 世界 可重複讀 repeatable read,mysql預設模式 每個事務有自己的 世界 除了一種情況。如果乙個事務成功執行並且新增了新資料,這些資料對其他正在執行的事務是可見...