什麼是資料庫事務?

時間 2021-06-12 17:00:25

1樓:大資料流動

事務是資料庫系統中的重要概念。

但是事務理解起來非常的抽象,所以我們舉個栗子:

轉賬是生活中常見的操作,比如從A賬戶轉賬100元到B賬號。站在使用者角度而言,這是乙個邏輯上的單一操作,然而在資料庫系統中,至少會分成兩個步驟來完成:

1.將A賬戶的金額減少100元

2.將B賬戶的金額增加100元。

在這個過程中可能會出現以下問題:

1.轉賬操作的第一步執行成功,A賬戶上的錢減少了100元,但是第二步執行失敗或者未執行便發生系統崩潰,導致B賬戶並沒有相應增加100元。

2.轉賬操作剛完成就發生系統崩潰,系統重啟恢復時丟失了崩潰前的轉賬記錄。

3.同時又另乙個使用者轉賬給B賬戶,由於同時對B賬戶進行操作,導致B賬戶金額出現異常。

為了便於解決這些問題,需要引入資料庫事務的概念。

通過上面的栗子,我們再看資料庫事務的定義:

資料庫事務是構成單一邏輯工作單元的操作集合

這樣就好理解一些了

關於事務的定義有幾點需要解釋下:

1.資料庫事務可以包含乙個或多個資料庫操作,但這些操作構成乙個邏輯上的整體。

2.構成邏輯整體的這些資料庫操作,要麼全部執行成功,要麼全部不執行。

3.構成事務的所有操作,要麼全都對資料庫產生影響,要麼全都不產生影響,即不管事務是否執行成功,資料庫總能保持一致性狀態。

4.以上即使在資料庫出現故障以及併發事務存在的情況下依然成立。

1.當資料庫操作失敗或者系統出現崩潰,系統能夠以事務為邊界進行恢復,不會出現A賬戶金額減少而B賬戶未增加的情況。

2.當有多個使用者同時運算元據庫時,資料庫能夠以事務為單位進行併發控制,使多個使用者對B賬戶的轉賬操作相互隔離。

事務使系統能夠更方便的進行故障恢復以及併發控制,從而保證資料庫狀態的一致性。

了解了這個我們就可以去看事務的幾個特性,這也是理解事務的非常重要的一點:

原子性(Atomicity):事務中的所有操作作為乙個整體像原子一樣不可分割,要麼全部成功,要麼全部失敗。

一致性(Consistency):事務的執行結果必須使資料庫從乙個一致性狀態到另乙個一致性狀態。一致性狀態是指:

1.系統的狀態滿足資料的完整性約束(主碼,參照完整性,check約束等) 2.系統的狀態反應資料庫本應描述的現實世界的真實狀態,比如轉賬前後兩個賬戶的金額總和應該保持不變。

隔離性(Isolation):併發執行的事務不會相互影響,其對資料庫的影響和它們序列執行時一樣。比如多個使用者同時往乙個賬戶轉賬,最後賬戶的結果應該和他們按先後次序轉賬的結果一樣。

永續性(Durability):事務一旦提交,其對資料庫的更新就是持久的。任何事務或系統故障都不會導致資料丟失。

在事務的ACID特性中,C即一致性是事務的根本追求,而對資料一致性的破壞主要來自兩個方面

1.事務的併發執行

2.事務故障或系統故障

資料庫系統是通過併發控制技術和日誌恢復技術來避免這種情況發生的。

併發控制技術保證了事務的隔離性,使資料庫的一致性狀態不會因為併發執行的操作被破壞。

日誌恢復技術保證了事務的原子性,使一致性狀態不會因事務或系統故障被破壞。同時使已提交的對資料庫的修改不會因系統崩潰而丟失,保證了事務的永續性。

不同的資料庫為了實現事務,就用了各種方案去解決,最終實現了事務。

2樓:咔啡

事務是作為乙個邏輯單元執行的一系列操作,要麼一起成功,要麼一起失敗。

乙個邏輯工作單元必須有四個屬性,稱為 ACID(原子性、一致性、隔離性和永續性)屬性,只有這樣才能成為乙個事務。

原子性 :事務必須是原子工作單元;對於其資料修改,要麼全都執行,要麼全都不執行。

一致性 :事務在完成時,必須使所有的資料都保持一致狀態。在相關資料庫中,所有規則都必須應用於事務的修改,保持所有資料的完整性。

事務結束時,所有的內部資料結構(如 B 樹索引或雙向鍊錶)都必須是正確的。

隔離性 :由併發事務所作的修改必須與任何其它併發事務所作的修改隔離。事務檢視資料時資料所處的狀態,要麼另一併發事務修改它之前的狀態,要麼是另一事務修改它之後的狀態,事務不會檢視中間狀態的資料。

這為可序列性,因為它能夠重新裝載起始資料,並且重播一系列事務,以使資料結束時的狀態與原始事務執的狀態相同。

永續性 :事務完成之後,它對於系統的影響是永久性的。該修改即使出現系統故障也將一直保持。

雲資料庫對比傳統資料庫好在哪?

這是哪個雲廠商又來搞運營話題了嗎?凡事有利必有弊,需要根據自己的情況選擇合適自己的。正式一點來說,雲資料庫省掉了機房 機器 安裝 調優 運維等等下幾路的基礎工作,外包給別人了,而且擴容 縮容之類的工作也都可能外包了。可是,這個外包並不總是比自己靠譜。而且還有服務響應速度,資料安全保密,是否跟你有競爭...

在web開發中,資料庫事務(不管是自己實現的事務還是利用資料庫本身的事務)到底有多重要?

郭凜 不同意 莊表偉的說法,例如像銀行結算,企業ERP這種業務對事務的需求就遠超過了對效能的需求,保證最終一致性是不夠的。而大多數網際網路應用則無所謂,發一條微博多幾個少幾個人看到其實無所謂 所以最重要的還是需求 蘿蔔白菜各有所愛 有的團隊嚴格要求使用,有的不支援也不反對,有的反對使用 只要控制好資...

分布式資料庫的分布式事務?

NebulaGraph 業務系統往往是通過子系統組合的模式來完成,這些子系統很可能是不同的資料庫,甚至可能是 友商 的,互相直接無法保證事務,還是得業務自身保證。 codingfor 你說的單機事物,我的理解其實是指single threaded excution,而不是指在單台機器上做事物 暗含了...