溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

數(shù)據(jù)庫(kù)的事務(wù)概念是什么

發(fā)布時(shí)間:2022-01-06 17:24:00 來(lái)源:億速云 閱讀:157 作者:iii 欄目:互聯(lián)網(wǎng)科技

這篇文章主要講解了“數(shù)據(jù)庫(kù)的事務(wù)概念是什么”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“數(shù)據(jù)庫(kù)的事務(wù)概念是什么”吧!

事務(wù)

事務(wù)是什么?

wiki:A transaction symbolizes a unit of work performed within a database management system (or similar system) against a database, and treated in a coherent and reliable way independent of other transactions. 

數(shù)據(jù)庫(kù)系統(tǒng)概念:構(gòu)成單一邏輯工作單元的操作集合稱作事務(wù)。

簡(jiǎn)單來(lái)說(shuō),事務(wù)就是包含一些性質(zhì)一系列操作。下面我們分別介紹這兩點(diǎn)。

一系列操作

事務(wù)的英文是 Transaction,交易。這個(gè)就是金融里的交易,交易的基本動(dòng)作就是轉(zhuǎn)賬,一個(gè)最經(jīng)典的事務(wù)就是 A 給 B 轉(zhuǎn) 50 元。這個(gè)事務(wù)由數(shù)據(jù)庫(kù)執(zhí)行就是6行代碼:

begin transaction(事務(wù)開(kāi)始標(biāo)志)

read(A)

A = A - 50

write(A)

read(B)

B = B + 50

write(B)

end transaction(事務(wù)結(jié)束標(biāo)志)

其中 read 為將變量從磁盤讀到內(nèi)存,+、- 操作為內(nèi)存操作,write 為將內(nèi)存中的值寫入磁盤。

在事務(wù)開(kāi)始和結(jié)束標(biāo)志中間就是一系列操作。其實(shí)就是一段代碼而已,沒(méi)有任何特別的,那么為什么要提出事務(wù)的概念呢?那就要說(shuō)到事務(wù)的性質(zhì)了。

原子性(Atomicity)

原子性:事務(wù)中包含的各項(xiàng)操作要么全部執(zhí)行,要么全部不執(zhí)行。

為什么有這個(gè)性質(zhì)?對(duì)于轉(zhuǎn)賬操作而言,普通用戶認(rèn)為這就是一個(gè)動(dòng)作,這個(gè)動(dòng)作要么發(fā)生,要么不發(fā)生,不應(yīng)該出現(xiàn)發(fā)生了一半的情況:即 A 的賬戶少了 50,但 B 的賬戶沒(méi)有多 50。因此,原子性是指將事務(wù)的一系列代碼當(dāng)做一行代碼來(lái)執(zhí)行。

那假如執(zhí)行一半停電了怎么辦?數(shù)據(jù)庫(kù)重啟后需要恢復(fù)到?jīng)]執(zhí)行事務(wù)的狀態(tài),即回滾。

一致性(Consistency)

一致性:隔離執(zhí)行事務(wù)時(shí)(沒(méi)有并發(fā)時(shí)),保持?jǐn)?shù)據(jù)庫(kù)的一致性。

這個(gè)解釋是不是很流氓。

看看wiki的:Consistency ensures that a transaction can only bring the database from one valid state to another, maintaining database invariants: any data written to the database must be valid according to all defined rules, including constraints, cascades, triggers, and any combination thereof. This prevents database corruption by an illegal transaction, but does not guarantee that a transaction is correct.

一致性就是數(shù)據(jù)庫(kù)里的數(shù)據(jù)滿足數(shù)據(jù)庫(kù)的所有定義的約束,這里的約束包括對(duì)主鍵和外鍵的數(shù)據(jù)庫(kù)內(nèi)部約束,也包括人為定義的對(duì)兩個(gè)值的約束,如 A+B=10 或者高中畢業(yè)年份必須比入學(xué)年份大3。編寫出符合一致性的事務(wù)是事務(wù)程序員的任務(wù),而數(shù)據(jù)庫(kù)會(huì)做最終檢查,不符合一致性的事務(wù)會(huì)被數(shù)據(jù)庫(kù)拒絕。

白話一點(diǎn):數(shù)據(jù)庫(kù)中有自己的規(guī)則,這些規(guī)則用來(lái)保證數(shù)據(jù)庫(kù)的狀態(tài)是正常的(一致的),事務(wù)要來(lái)執(zhí)行就需要遵守?cái)?shù)據(jù)庫(kù)的規(guī)則。

隔離性(Isolation)

隔離性:事務(wù)的隔離性是指在并發(fā)執(zhí)行中,系統(tǒng)保證,對(duì)于兩個(gè)事務(wù)T1,T2。在T1看來(lái),T1或者在T2開(kāi)始前完成,或者在T2完成后開(kāi)始。讓事務(wù)感受不到系統(tǒng)中有其他事務(wù)在并發(fā)執(zhí)行。

隔離性與調(diào)度有關(guān),調(diào)度就是代碼的執(zhí)行順序??紤]一個(gè)動(dòng)作是 A 給 B 轉(zhuǎn) 50,另一個(gè)動(dòng)作是 B 給 A 轉(zhuǎn) 50。這兩個(gè)動(dòng)作都是由 6 行代碼組成。

在保證事務(wù)內(nèi)部代碼執(zhí)行順序不變的前提下,數(shù)據(jù)庫(kù)可以有很多種調(diào)度策略來(lái)執(zhí)行這 12 行代碼。最嚴(yán)格也最安全的是串行調(diào)度,即一次執(zhí)行一個(gè)事務(wù),n 個(gè)事務(wù)的串行化調(diào)度策略有 n! 種,就是個(gè)排列。下面是 2 個(gè)事務(wù)的 2 種串行調(diào)度。

數(shù)據(jù)庫(kù)的事務(wù)概念是什么

需要明確,不同的串行調(diào)度策略結(jié)果可能不一樣,但都能滿足一致性。想想為啥?因?yàn)槊恳粋€(gè)事務(wù)都滿足一致性啊,一個(gè)一個(gè)執(zhí)行肯定也滿足了,不管什么順序。

除了串行調(diào)度,還有很多其他調(diào)度,但是符合要求的調(diào)度應(yīng)該都可以等價(jià)為一個(gè)串行調(diào)度,這種符合要求的調(diào)度就是可串行化調(diào)度??紤]下邊 2 個(gè)調(diào)度:

數(shù)據(jù)庫(kù)的事務(wù)概念是什么

左邊的調(diào)度就是可串行化調(diào)度,右邊的調(diào)度就是不可串行化調(diào)度。

可串行化是一種隔離級(jí)別。為了滿足性能的要求,數(shù)據(jù)庫(kù)還提供了其他隔離級(jí)別,這些隔離級(jí)別按由強(qiáng)到弱分別為:

可串行化 > 可重復(fù)讀 > 讀已提交 > 讀未提交

不同的隔離級(jí)別對(duì)數(shù)據(jù)庫(kù)使用者的表現(xiàn)不一樣。將事務(wù)按照一定的隔離級(jí)別隔離是并發(fā)控制的主要目標(biāo)。

持久性(Durability)

持久性:事務(wù)一旦提交(commit),對(duì)數(shù)據(jù)庫(kù)中對(duì)應(yīng)數(shù)據(jù)的狀態(tài)變更就應(yīng)該是永久性的。

事務(wù)的提交類似 word 的保存,保存后就不會(huì)丟失了,避免 word 崩了心態(tài)炸了。

簡(jiǎn)單來(lái)說(shuō)就是事務(wù)對(duì)數(shù)據(jù)的操作應(yīng)該寫磁盤,不能僅僅停留在內(nèi)存中。

四種性質(zhì)的交叉

原子性和一致性的關(guān)系比較不好理解。

原子性是一致性的必要條件嗎?不是,假如數(shù)據(jù)庫(kù)的約束為 A 和 B 都大于0。

begin transaction

write(A)=50

write(B)=50

end transaction

當(dāng)執(zhí)行完write(A)后,不執(zhí)行write(B),這里不符合原子性,但是滿足一致性。

原子性是一致性的充分條件嗎?不是,同上的約束,A 和 B 都大于 0,考慮下邊這個(gè)事務(wù)

begin transaction

write(A)=-10

write(B)=-20

end transaction

這里即使?jié)M足原子性,將 A 和 B 的值都改掉,也不滿足一致性。

隔離性和一致性的關(guān)系簡(jiǎn)單一點(diǎn)。隔離性是事務(wù)并發(fā)時(shí)保證一致性的必要條件。

數(shù)據(jù)庫(kù)的事務(wù)概念是什么

原子性、隔離性、持久性是數(shù)據(jù)庫(kù)需要為所有事務(wù)提供的通用處理方式。唯有一致性是和業(yè)務(wù)掛鉤的。他們的關(guān)系大概如上圖。這樣,事務(wù)的基本定義和性質(zhì)就清楚了。

感謝各位的閱讀,以上就是“數(shù)據(jù)庫(kù)的事務(wù)概念是什么”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)數(shù)據(jù)庫(kù)的事務(wù)概念是什么這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI