MySQL的四種事務隔離級別

2022-05-10 18:30:20 字數 2279 閱讀 9120

一、事務的四大特性(acid)

(1)原子性(atomicity)

原子性是指事務包含的所有操作要麼全部成功,要麼全部失敗回滾.

(2)一致性(consistency)

乙個事務執行之前和執行之後都必須處於一致性狀態。

例如:a和使用者b兩者的錢加起來一共是,a和b之間無論如何轉賬,轉幾次賬,事務結束後兩個使用者的錢相加起來應該是5000,這就是事務的一致性。

(3)隔離性(isolation)

隔離性是當多個使用者併發訪問資料庫時,比如操作同一張表時,資料庫為每乙個使用者開啟的事務,不能被其他事務的操作所干擾,多個併發事務之間要相互隔離。

即要達到這麼一種效果:對於任意兩個併發的事務t1和t2,在事務t1看來,t2要麼在t1開始之前就已經結束,

要麼在t1結束之後才開始,這樣每個事務都感覺不到有其他事務在併發地執行。隔離級別見下文。

(4)永續性(durability)

永續性是指乙個事務一旦被提交了,那麼對資料庫中的資料的改變就是永久性的,即便是在資料庫系統遇到故障的情況下也不會丟失提交事務的操作。

二、mysql事務隔離級別

1.讀未提交(造成髒讀)

讀取其他事物未提交的結果。

公司發工資了,領導把5000元打到singo的賬號上,但是該事務並未提交,而singo正好去檢視賬戶,發現工資已經到賬,是5000元整,非常高興。可是不幸的是,領導發現發給singo的工資金額不對,是2000元,於是迅速回滾了事務,修改金額後,將事務提交,最後singo實際的工資只有2000元,singo空歡喜一場。

2.讀已提交(造成不可重複讀)

讀取其他事物已經提交的結果。未提交前,所做的修改,對其他事物是不可見的。兩次執行同樣的查詢,結果可能是不一樣的。

singo拿著工資卡去消費,系統讀取到卡里有2000元,而此時她的老婆也正好在網上轉賬,把singo工資卡的2000元轉到另一賬戶,並在singo之前提交了事務,當singo扣款時,系統檢查到singo的工資卡已經沒有錢,扣款失敗。

3.可重複讀(造成幻讀,mysql預設級別)

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

該sql第一次讀取到資料後,就將這些資料加鎖(悲觀鎖),其它事務無法修改這些資料,就可以實現可重複讀了。但這種方法卻無法鎖住insert的資料,所以當事務a先前讀取了資料,或者修改了全部資料,事務b還是可以insert資料提交,這時事務a就會發現莫名其妙多了一條之前沒有的資料,這就是幻讀,不能通過行鎖來避免。

但是mysql、oracle、postgresql等成熟的資料庫,出於效能考慮,都是使用了以樂觀鎖為理論基礎的mvcc(多版本併發控制)來實現。

singo的老婆工作在銀行部門,她時常通過銀行內部系統檢視singo的信用卡消費記錄。有一天,她正在查詢到singo當月信用卡的總消費金額(select sum(amount) from transaction where month = 本月)為80元,而singo此時正好在外面胡吃海塞後在收銀台買單,消費1000元,即插入了一條1000元的消費記錄(insert transaction ... ),並提交了事務,隨後singo的老婆將singo當月信用卡消費的明細列印到a4紙上,卻發現消費總額為1080元,singo的老婆很詫異,以為出現了幻覺,幻讀就這樣產生了。

4.可序列化

事務序列化順序執行,可以避免髒讀、不可重複讀與幻讀加鎖。

事務隔離級別

髒讀不可重複讀

幻讀讀未提交是是

是不可重複讀否是

是可重複讀否否

是序列化否否

否mysql預設的事務隔離級別為可重複讀

1、 髒讀:髒讀是指在乙個事務處理過程裡讀取了另乙個未提交的事務中的資料。事務a讀取了事務b更新的資料,然後b回滾操作,那麼a讀取到的資料是髒資料。

2、不可重複讀:事務 a 多次讀取同一資料,事務 b 在事務a多次讀取的過程中,對資料作了更新並提交,導致事務a多次讀取同一資料時,結果 不一致。

3、幻讀:系統管理員a將資料庫中所有學生的成績從具體分數改為abcde等級,但是系統管理員b就在這個時候插入了一條具體分數的記錄,

當系統管理員a改結束後發現還有一條記錄沒有改過來,就好像發生了幻覺一樣,這就叫幻讀。

多併發版本控制mvcc(multi-version concurrent control):參考:

MySQL 四種事務隔離級別

mysql 事務都是指在 innodb 引擎下,myisam 引擎不支援事務。顯而易見,能夠讀取到,其他事務未提交的資料。既然其他事務未提交,就代表資料可能會回滾,這也意味著,可能讀取到的資料根本就不存在。特點 能讀取其它事務未提交的資料。存在事務問題 髒讀,不可重複讀,幻讀 這個隔離級別,只能讀取...

MySQL的四種事務隔離級別

一 事務的基本要素 acid 1 原子性 atomicity 事務開始後所有操作,要麼全部做完,要麼全部不做,不可能停滯在中間環節。事務執行過程中出錯,會回滾到事務開始前的狀態,所有的操作就像沒有發生一樣。也就是說事務是乙個不可分割的整體,就像化學中學過的原子,是物質構成的基本單位。2 一致性 co...

mysql的四種事務隔離級別

一 事務的基本要素 acid 1 原子性 atomicity 事務開始後所有操作,要麼全部做完,要麼全部不做,不可能停滯在中間環節。事務執行過程中出錯,會回滾到事務開始前的狀態,所有的操作就像沒有發生一樣。也就是說事務是乙個不可分割的整體,就像化學中學過的原子,是物質構成的基本單位。2 一致性 co...