MySQL事務的四大特性以及并發(fā)事務問題解讀
MySQL事務的四大特性以及并發(fā)事務
事務的四大特性ACID
原子性(Atomicity):
- 事務是不可分割的最小單元,要么全部成功,要么全部失敗。
- (eg:轉(zhuǎn)賬案例,轉(zhuǎn)賬過程中任何一步操作失敗了,那么整個事務就失敗了)
一致性(Consistency):
- 事務完成時,必須使所有的數(shù)據(jù)都保持一致狀態(tài)。
- (不管是事務執(zhí)行成功提交,還是事務執(zhí)行失敗回滾了,張三李四賬戶余額加起是一個恒定值。轉(zhuǎn)賬前總和6000,轉(zhuǎn)賬后不可能出現(xiàn)兩個人的賬戶總和8000)
隔離性(Isolation):
- 數(shù)據(jù)庫系統(tǒng)提供的隔離機制,保證事務在不受外部并發(fā)操作影響的獨立環(huán)境下運行。
- (隔離性是指:有并發(fā)個事務,事務A、事務B同時操作數(shù)據(jù)庫,A事務在操作的時候不會影響B(tài)事務的執(zhí)行;同理B事務在操作的時候,也不會影響A事務的執(zhí)行。它們兩個事務在獨立的環(huán)境下運行的,互不影響。)
持久性(Persistence):
- 事務一旦提交或回滾,它對數(shù)據(jù)庫中的數(shù)據(jù)改變就是永久的。
- (不管是事務執(zhí)行成功提交了,還是操作異?;貪L了,它對數(shù)據(jù)庫的改變時永久的,因為數(shù)據(jù)庫的數(shù)據(jù)最終是存儲在磁盤的,那么存儲在磁盤的數(shù)據(jù)它會被永久的保留下來)
事務-并發(fā)事務問題
臟讀:一個事務讀到另一個事務還沒有提交的數(shù)據(jù)。
不可重復讀:一個事務先后讀取同一條記錄,但兩次讀取的數(shù)據(jù)不同,稱之為不可重復讀。
幻讀: 一個事務按照條件查詢事務時,沒有對應的數(shù)據(jù)行,但是在插入數(shù)據(jù)時,又發(fā)現(xiàn)這行數(shù)據(jù)已存在,好像出現(xiàn)了幻影。
并發(fā)事務出現(xiàn)的問題-圖文描述:
臟讀:
- B事務讀取A事務修改后(update后)未提交的數(shù)據(jù);
- 事務A對id=1 的數(shù)據(jù)進行了修改,且修改后還未提交事務,此時事務B查詢id=1的數(shù)據(jù),查到的數(shù)據(jù)是事務B修改后未提交的數(shù)據(jù)。這種情況稱之為臟讀。
不可以重復讀:
- A事務一共有4個操作,第一步時查詢數(shù)據(jù)庫id=1的數(shù)據(jù),第二步執(zhí)行其他操作時,此時B事務對id=1的數(shù)據(jù)進行修改(注:并發(fā)事務),修改后提交事務。
- A事務執(zhí)行第三步查詢id=1的數(shù)據(jù)時,和第一步查詢id=1的返回結(jié)果不一樣(因為B事務對id=1的數(shù)據(jù)進行了修改),這種情況稱之為不可以重復讀。
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
Centos7下安裝MySQL8.0.23的步驟(小白入門級別)
這篇文章主要介紹了Centos7下安裝MySQL8.0.23的步驟(小白入門級別),本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-01-01淺談sql語句中GROUP BY 和 HAVING的使用方法
GROUP BY語句和HAVING語句,經(jīng)過研究和練習,終于明白如何使用了,在此記錄一下同時添加了一個自己舉的小例子,通過寫這篇文章來加深下自己學習的效果,還能和大家分享下,同時也方便以后查閱,一舉多得,下面由小編來和大家一起學習2019-05-05為什么MySQL選擇Repeatable Read作為默認隔離級別
關于MySQL的事務隔離級別,相信很多讀者都不陌生,那么,你知道為什么Oracle選擇RC作為默認級別,而MySQL要選擇RR作為默認的隔離級別嗎2021-07-07