資料庫事務

2021-08-17 02:10:21 字數 1455 閱讀 4039

事務(transaction),一般是指要做的或所做的事情。在計算機術語中是指訪問並可能更新資料庫中各種資料項的乙個程式執行單元(unit)。

只有存在併發資料訪問時才需要事務!

當多個事務訪問同一資料時,可能會存在5類問題,包括3類資料讀取問題(髒讀、不可重複讀和幻讀)和2類資料更新問題(第1類丟失更新和第2類丟失更新)。

髒讀(dirty read):a事務讀取b事務尚未提交的資料並在此基礎上操作,而b事務執行回滾,那麼a讀取到的資料就是髒資料。

不可重複讀(unrepeatable read):事務a重新讀取前面讀取過的資料,發現該資料已經被另乙個已提交的事務b修改過了。

幻讀(phantom read):事務a重新執行乙個查詢,返回一系列符合查詢條件的行,發現其中插入了被事務b提交的行。

第1類丟失更新:事務a撤銷時,把已經提交的事務b的更新資料覆蓋了。

第2類丟失更新:事務a覆蓋事務b已經提交的資料,造成事務b所做的操作丟失。

隔離級別

髒讀不可重複讀

幻讀第一類丟失更新

第二類丟失更新

read uncommitted(讀未提交)

允許允許

允許不允許

允許read committed(讀已提交)

不允許允許

允許不允許

允許repeatable read(可重複讀)

不允許不允許

允許不允許

不允許serializable(可序列化)

不允許不允許

不允許不允許

不允許資料庫通常會通過鎖機制來解決資料併發訪問問題,按鎖定物件不同可以分為表級鎖和行級鎖;按併發事務鎖定關係可以分為共享鎖和獨佔鎖。直接使用鎖是非常麻煩的,為此資料庫為使用者提供了自動鎖機制,只要使用者指定會話的事務隔離級別,資料庫就會通過分析sql語句然後為事務訪問的資源加上合適的鎖,此外,資料庫還會維護這些鎖通過各種手段提高系統的效能。需要說明的是,事務隔離級別和資料訪問的併發性是對立的,事務隔離級別越高併發性就越差。所以要根據具體的應用來確定合適的事務隔離級別,這個地方沒有萬能的原則。

oracle預設的是 read committed。mysql的預設是:repeatable read

資料庫事務

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

資料庫 事務

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

資料庫事務

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