您好,登錄后才能下訂單哦!
這篇文章主要介紹了數據庫事務隔離級別是什么,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
數據庫事務隔離級別:1、Read Uncommitted(讀未提交);2、Read Committed(讀已提交);3、Repeatable Read(可重復讀取);4、Serializable(可串行化)。
本教程操作環境:windows7系統、mysql8版本、Dell G3電腦。
在數據庫操作中,一項事務(Transaction)是由一條或多條操作數據庫的 SQL 語句組成的一個不可分割的工作單元,這些操作要么都完成,要么都取消。
數據庫事務隔離級別
在實際應用中,數據庫中的數據是要被多個用戶共同訪問的,在多個用戶同時操作相同的數據時,可能就會出現一些事務的并發問題,具體如下。
1)臟讀
指一個事務讀取到另一個事務未提交的數據。
2)不可重復讀
指一個事務對同一行數據重復讀取兩次,但得到的結果不同。
3)虛讀/幻讀
指一個事務執行兩次查詢,但第二次查詢的結果包含了第一次查詢中未出現的數據。
4)丟失更新
指兩個事務同時更新一行數據,后提交(或撤銷)的事務將之前事務提交的數據覆蓋了。
丟失更新可分為兩類,分別是第一類丟失更新和第二類丟失更新。
第一類丟失更新是指兩個事務同時操作同一個數據時,當第一個事務撤銷時,把已經提交的第二個事務的更新數據覆蓋了,第二個事務就造成了數據丟失。
第二類丟失更新是指當兩個事務同時操作同一個數據時,第一個事務將修改結果成功提交后,對第二個事務已經提交的修改結果進行了覆蓋,對第二個事務造成了數據丟失。
為了避免上述事務并發問題的出現,在標準的 SQL 規范中定義了四種事務隔離級別,不同的隔離級別對事務的處理有所不同。這四種事務的隔離級別如下。
1)Read Uncommitted(讀未提交)
一個事務在執行過程中,既可以訪問其他事務未提交的新插入的數據,又可以訪問未提交的修改數據。如果一個事務已經開始寫數據,則另外一個事務不允許同時進行寫操作,但允許其他事務讀此行數據。此隔離級別可防止丟失更新。
2)Read Committed(讀已提交)
一個事務在執行過程中,既可以訪問其他事務成功提交的新插入的數據,又可以訪問成功修改的數據。讀取數據的事務允許其他事務繼續訪問該行數據,但是未提交的寫事務將會禁止其他事務訪問該行。此隔離級別可有效防止臟讀。
3)Repeatable Read(可重復讀取)
一個事務在執行過程中,可以訪問其他事務成功提交的新插入的數據,但不可以訪問成功修改的數據。讀取數據的事務將會禁止寫事務(但允許讀事務),寫事務則禁止任何其他事務。此隔離級別可有效防止不可重復讀和臟讀。
4)Serializable(可串行化)
提供嚴格的事務隔離。它要求事務序列化執行,事務只能一個接著一個地執行,不能并發執行。此隔離級別可有效防止臟讀、不可重復讀和幻讀。但這個級別可能導致大量的超時現象和鎖競爭,在實際應用中很少使用。
一般來說,事務的隔離級別越高,越能保證數據庫的完整性和一致性,但相對來說,隔離級別越高,對并發性能的影響也越大。因此,通常將數據庫的隔離級別設置為 Read Committed,即讀已提交數據,它既能防止臟讀,又能有較好的并發性能。雖然這種隔離級別會導致不可重復讀、幻讀和第二類丟失更新這些并發問題,但可通過在應用程序中采用悲觀鎖和樂觀鎖加以控制。
感謝你能夠認真閱讀完這篇文章,希望小編分享的“數據庫事務隔離級別是什么”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。