資料庫事務

2021-07-27 01:50:39 字數 1630 閱讀 4752

資料庫事務

* 資料庫事務定義

* 資料庫事務是乙個或一組sql操作序列的集合,這個集合裡的操作要麼全部成功,要麼全部失敗;有些業務(比如銀行轉賬)必須使用事務控制,才能滿足應用需求。事務的四大特性是原子性、一致性、隔離性、永續性,任何資料庫的事務實現機制都必須保證這四個特性,簡稱acid。

* 資料庫特性

* 原子性

* 事務的原子性指的是事務內的操作序列要麼全部成功,要麼全部失敗。這個概念和作業系統的原子性是不一樣的,通常所說的原子性操作是指操作不會被打斷,即操作之間不會插入別的操作。原子性中要求的全部成功是比較容易實現的,正常情況下事務內的操作肯定是全部成功的,如果事務執行過程中遇到事務異常,資料庫應該回滾到事務開始前的狀態。

* 一致性

* 定義

資料庫在事務開始前事務結束時必須都處於一致性的狀態,比如a和b轉賬,轉賬事務開始前和結束後,a和b的錢總和必須是相等的,這樣才能說這個事務保證了一致性。如果把a的錢減去100和b的錢加上100這個操作序列放在乙個事務裡,事務能保證原子性,從而實現了一致性,這樣看來,一致性和原子性是密切相關的。

* 不一致性型別

常見的不一致性包括:丟失修改、髒讀和不可重複讀。

丟失修改:兩個事務併發的修改同一資料,後執行的事務對資料的修改覆蓋了第乙個事務的修改。t1:讀a=1,a=a+1=2;t2:讀a=1,a=a+1=2。事務t1對資料a的修改丟失了。

髒讀:乙個事務讀了另乙個事務修改後又回滾了的資料。t1:讀a=1,修改a=3,做其他的事,回滾事務a=1;t2:在t1的a=3和回滾a=1之間讀到了a=3。事務t2讀到了a=3這個髒資料。

不可重複度:乙個事務中兩次讀同乙個資料物件,兩次讀到的結果不一樣。t1:讀a=1,做其他的事,讀a=3;t2:在t1讀a=1和a=3之間,修改a=3。不可重複度有三種情況,在乙個事務兩次讀之間,另乙個事務插入、刪除、更新都會造成不可重複讀的情況。

資料庫的這三種不一致性可以通過封鎖機制來解決。

* 封鎖機制

鎖的型別包括寫鎖(x鎖)和讀碩(s鎖)。如果乙個事務對乙個物件加了寫鎖,其他事務對這個物件不能加讀鎖,也不能加寫鎖;如果乙個事務對乙個物件加了讀鎖,其他事務對這個物件不能加寫鎖,但是可以加讀鎖,;

一級封鎖協議:事務在修改乙個資料物件之前,必須對這個資料物件加寫鎖,修改完資料釋放讀鎖。修改時不可讀寫,可避免丟失修改。

二級封鎖協議:在一級封鎖協議的基礎上,事務在讀乙個資料物件之前,必須對它加讀鎖,讀完資料釋放讀鎖。讀時不可修改。可避免髒讀。

**封鎖協議:在二級封鎖協議的基礎上,事務在讀乙個資料物件之前,必須對它加讀鎖,事務結束時資料釋放讀鎖。加了讀鎖到事務結束前,其他事務都不可修改這個資料,可避免不可重複度。

* 隔離性

* 隔離性表示多個事務同時執行時,相互之間是隔離的。隔離性有強有弱,隔離級別越高,隔離性越強。隔離級別由低到高分別是read uncommited、read commited、repeatable read、serializable這四種

隔離級別

髒讀不可重複讀

幻讀rc

可能可能

可能ru

不可能可能

可能rr

不可能不可能

可能serializable

不可能不可能

不可能

資料庫事務

事件是訪問並可能更新各種資料項的乙個程式執行單元。事件由事務開始與事務結束之間執行的全體操作組成。為了保證資料完整性,資料庫系統需要維護事務的以下性質 原子性 atomicity 事務中的操作要麼全部成功,要麼全部失敗。一致性 consistency 事務執行前後要保持資料庫的一致性。隔離性 iso...

資料庫 事務

資料庫事務 database transaction 是指作為單個邏輯工作單元執行的一系列操作。事務處理可以確保除非事務性單元內的所有操作都成功完成,否則不會永久更新面向資料的資源。通過將一組相關操作組合為乙個要麼全部成功要麼全部失敗的單元,可以簡化錯誤恢復並使應用程式更加可靠。乙個邏輯工作單元要成...

資料庫事務

這段時間面試,由於基礎不是特別好,遇到一些要筆試的公司。就會表示出來 今天有人問我,資料庫事務 是什麼。我只感覺十分熟悉。但是又說不出所以然。回來找了一下,現在整理記錄 1 定義 資料庫事務 database transaction 是指作為單個邏輯工作單元執行的一系列操作。事務處理可以確保除非事務...