資料庫事務特性以及隔離級別

2021-08-21 16:56:28 字數 2239 閱讀 7055

資料庫如果支援事務的操作,那麼就具備以下四個特性:

原子性(atomicity)

事務是資料庫的邏輯工作單位,事務中包括的諸操作要麼全做,要麼全不做。

一致性(consistency)

事務執行的結果必須是使資料庫從乙個一致性狀態變到另乙個一致性狀態。一致性與原子性是密切相關的。

隔離性(isolation)

乙個事務的執行不能被其他事務干擾。

持續性/永久性(durability)

乙個事務一旦提交,它對資料庫中資料的改變就應該是永久性的。

mysql資料庫針對這四種特性,為我們提供的四種隔離級別,這四個級別可以逐個解決髒讀、不可重複讀、幻讀這幾類問題。

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

髒讀是兩個併發的事務,「事務a:領導發工資」、「事務b:我查詢工資賬戶」,事務b讀取了事務a尚未提交的資料。

當隔離級別設定為read uncommitted時,就可能出現髒讀,如何避免髒讀,請看下乙個隔離級別。

允許髒讀,也就是可能讀取到其他會話中未提交事務修改的資料

我拿著工資卡去消費,系統讀取到卡里確實有2000元,而此時老婆也正好在網上轉賬,把工資卡的2000元轉到她賬戶,並在我之前提交了事務,當我扣款時,系統檢查到工資卡已經沒有錢,扣款失敗,十分納悶,明明卡里有錢,為何……

不可重複讀是兩個併發的事務,「事務a:消費」、「事務b:老婆網上轉賬」,事務a事先讀取了資料,事務b緊接了更新了資料,並提交了事務,而事務a再次讀取該資料時,資料已經發生了改變。

當隔離級別設定為read committed時,避免了髒讀,但是可能會造成不可重複讀。

只能讀取到已經提交的資料。oracle等多數資料庫預設都是該級別 (不重複讀)

當隔離級別設定為repeatable read時,可以避免不可重複讀。當我拿著工資卡去消費時,一旦系統開始讀取工資卡資訊(即事務開始),我老婆就不可能對該記錄進行修改,也就是不能在此時轉賬。

雖然repeatable read避免了不可重複讀,但還有可能出現幻讀。例如:老婆工作在銀行部門,她時常通過銀行內部系統檢視我的信用卡消費記錄。有一天,她正查詢到我當月信用卡的總消費金額(select sum(amount) from transaction where month = 本月)為80元,而我此時正好在外面吃完大餐後在收銀台買單,消費1000元,即新增了一條1000元的消費記錄(insert transaction … ),並提交了事務,隨後老婆將我的當月信用卡消費的明細列印到a4紙上,卻發現消費總額為1080元,老婆很詫異,以為出現了幻覺,幻讀就這樣產生了。

可重複讀。在同乙個事務內的查詢都是事務開始時刻一致的,innodb預設級別。在sql標準中,該隔離級別消除了不可重複讀,但是還存在幻象讀

完全序列化的讀,每次讀都需要獲得表級共享鎖,讀寫相互都會阻塞

隔離級別

髒讀(dirty read)

不可重複讀(nonrepeatable read)

幻讀(phantom read)

讀未提交(read uncommitted)

可能可能

可能讀已提交(read committed)

不可能可能

可能可重複讀(repeatable read)

不可能不可能

可能可序列化(serializable)

不可能不可能

不可能髒讀就是指當乙個事務正在訪問資料,並且對資料進行了修改,而這種修改還沒有提交到資料庫中,這時,另外乙個事務也訪問這個資料,然後使用了這個資料。

是指在乙個事務內,多次讀同一資料。在這個事務還沒有結束時,另外乙個事務也訪問該同一資料。那麼,在第乙個事務中的兩次讀資料之間,由於第二個事務的修改,那麼第乙個事務兩次讀到的的資料可能是不一樣的。這樣就發生了在乙個事務內兩次讀到的資料是不一樣的,因此稱為是不可重複讀。

第乙個事務對乙個表中的資料進行了修改,這種修改涉及到表中的全部資料行。同時,第二個事務也修改這個表中的資料,這種修改是向表中插入一行新資料。那麼,以後就會發生操作第乙個事務的使用者發現表中還有沒有修改的資料行,就好象發生了幻覺一樣。

mysql 四種事務隔離級的說明

資料庫四大特性以及事務隔離級別

資料庫事務以及隔離級別

例 張三給李四轉賬10元 李四賬戶增加10元,張三賬戶減少十元,要麼都執行成功,要麼都失敗 回滾 例 張三給李四轉20元,王五給孫六轉10元。兩個事務互不干擾,不能張三的錢轉給孫六。例 張三轉給李四40元 張三和李四的總賬戶餘額不變。原子性和隔離性保證一致性 這四種隔離級別是sql的標準定義。mys...

資料庫事務特性及隔離級別

1.原子性 atomicity 2.一致性 consistency 3.隔離性 durability 4.永續性在高併發情況下,要完成保證事務acid特性是十分困難的,除非把所有的事務序列化執行,但是因此造成的影響將是系統效能大大降低。在實際開發中很多業務對事務的要求是不一樣的,因此資料庫設計了四種...

資料庫事務特性和隔離級別

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