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預設模式 每個事務有自己的 世界 除了一種情況。如果乙個事務成功執行並且新增了新資料,這些資料對其他正在執行的事務是可見...