事務的四種隔離級別及如何理解

2021-10-02 11:10:59 字數 1292 閱讀 9628

read uncommited

read commited

repetable read

serializable

讀未提交,就是乙個事務可以讀取另乙個事務未提交的資料

舉例:小明的工資是20000,人事在輸入工資的時候多打了個0,但是還沒有提交,此時小明會查到自己的工資變成了20000

問題:會出現髒讀,即:乙個事務讀取另乙個事務未提交的資料

讀已提交,乙個事務只能讀取另乙個事務已提交的事務

舉例:程式設計師拿著信用卡去享受生活(卡里當然是只有3.6萬),當他埋單時(程式設計師事務開啟),收費系統事先檢測到他的卡里有3.6萬,就在這個時候!!程式設計師的妻子要把錢全部轉出充當家用,並提交。當收費系統準備扣款時,再檢測卡里的金額,發現已經沒錢了(第二次檢測金額當然要等待妻子轉出金額事務提交完)。程式設計師就會很鬱悶,明明卡里是有錢的

問題:解決了髒讀問題,但是會出現不可重複讀問題,即:出現了乙個事務範圍內兩個相同的查詢卻返回了不同資料,這就是不可重複讀。

重複讀,就是在開始讀取資料(事務開啟)時,不再允許修改操作

事例:程式設計師拿著信用卡去享受生活(卡里當然是只有3.6萬),當他埋單時(事務開啟,不允許其他事務的update修改操作),收費系統事先檢測到他的卡里有3.6萬。這個時候他的妻子不能轉出金額了。接下來收費系統就可以扣款了。

分析:重複讀可以解決不可重複讀問題。寫到這裡,應該明白的一點就是,**不可重複讀對應的是修改,即update操作。**但是可能還會有幻讀問題。因為幻讀問題對應的是插入insert操作,而不是update操作。

serializable 是最高的事務隔離級別,在該級別下,事務序列化順序執行,可以避免髒讀、不可重複讀與幻讀。但是這種事務隔離級別效率低下,比較耗資料庫效能,一般不使用。

事務的隔離級別有四種,

分別是read uncommited, read commited, repeatable read, serializable. 對應可能出現的問題是髒讀,不可重複度,幻讀,解決所有。但是,隔離級別越高(序列最高),效率越低,所以,需要根據具體業務的需求來定。

sql server和oracle預設的隔離級別是read commited.

mysql 預設的隔離級別是repeatable read.

read commited: 當乙個事務修改(包括insert, update ,delete)一條資料的時候,其他事務不能讀取。

repeatable read: 當乙個事務讀取表的時候,其他事務不能update表;

serializable: 當乙個事務讀取表中資料中的時候,其他事務不能insert表;

事務四種隔離級別

1.讀取未提交 乙個事務可以讀取另乙個未提交的事務的資料。髒讀 2.讀取已提交 事務a多次讀取同一資料,事務b在事務a多次讀取的過程中,對資料做了更新並提交,導致事務a多次讀取同一資料時,結果不一致。不可重複度 對應update操作 3.可重複讀 開始讀取資料時 事務開啟時 不在允許修改操作。可能會...

四種事務的隔離級別

sql 標準定義的四個隔離級別為 read uncommitted 未提交讀 read committed 提交讀 repeatable read 可重複讀 serializable 可序列化 下面分別介紹。1 未提交讀 就是乙個事務可以讀取另乙個未提交事務的資料。1 開啟乙個客戶端a,並設定當前事...

事務的四種隔離級別

資料庫事務的隔離級別有4種,由低到高分別為read uncommitted read committed repeatable read serializable 在事務的併發操作中可能會出現髒讀,不可重複讀,幻讀。具體可參照該篇部落格 read uncommitted 讀未提交,即乙個事務可以讀取...