**:
1. 事務的特性(acid):
(1) 原子性 atomicity: 事務所包含的資料庫操作要麼都做,要麼都不做
(2) 一致性 consistency: 事務前後,所有的資料都保持一致的狀態
例如:事務之前a,b兩個賬戶的總和是10萬(a: 4w, b: 6w), 現在a轉賬2w給b (a: 2w, b: 8w)
a, b賬戶總和依舊是10w,如果不是10w的話,則事務前後對於賬戶總和這種資源是不一致的。
(3) 隔離性 isolation: 事務對資料的操作不能夠受到其他事務的影響
(4) 持續性 durability: 資料庫事務一旦提交,其對資料庫中資料的改變應該是永久性的
2. 事務的結束方式包括:
commit, rollback
3. 破壞事務acid特性的因素包括:
(1) 多個事務並行執行,不同的操作交叉執行
(2) 事務在執行過程中被強行終止
4. 併發事務帶來的問題:
資料庫併發的事務會帶來以下問題:
(1) 髒讀:事務a修改資料時,事務b讀取了該資料,但是事務a由於某種原因取消了對資料的修改,使資料返回了原狀態,這時事務b讀取的資料與資料庫中的資料就會不一致。
(2) 不可重複讀:事務a讀取資料庫中的資料後,事務b更新了該資料,當事務a再次讀取該資料時,就會發現資料已經發生了改變
(3) 幻影讀:事務a基於某個條件讀取資料後,事務b在同乙個表中插入了一條資料,這時事務a基於相同的條件再次讀取資料時,返回了不同的行
5. 事務隔離級別
為了保證資料的一致性,一般採用了事務隔離機制,又稱為事務序列化,用來保證事務盡量按照序列的方式執行
級別1:讀取未提交,這種併發性最高,但會導致上述三個問題
級別2:讀取已提交,這是oracle的預設隔離級別
級別3:可重複讀
級別4:序列,這種隔離級別最高,但資料庫併發會受到很大的限制,可以避免上述三個問題,但專案中不會採用
6. 資料庫鎖
資料庫是乙個多使用者使用的共享資源,當多個使用者併發地訪問資料時,在資料庫中就會產生多個事務同時訪問同一資料的情況。若對併發操作不加控制就可能會讀取和儲存不正確的資料,破壞資料庫的一致性。
加鎖是實現資料庫併發控制的乙個非常重要的技術,當事務在對某個資料物件進行操作前,先向系統發出請求,對其加鎖,加鎖後事務就對該資料物件有了一定的控制,在該事務釋放鎖之前,其他的事務不能對此資料物件進行更新操作。
兩種鎖機制:
共享鎖(s鎖):加了共享鎖的資料庫物件可以被其他事務讀取,但是不能被其他事務修改。
獨佔鎖(x鎖):加了獨佔鎖的資料庫物件不能被其他事務讀取和修改。
commit或rollback後,事務所使用的鎖被釋放。
7. 資料庫鎖的型別:
(1) dml鎖(data locks 資料鎖):能夠防止同步衝突的dml和ddl操作的破壞性,是oracle主要的鎖,又包括表級鎖(tm鎖)和行級鎖(tx鎖)
當oracle執行dml語句的時候,系統自動在所要操作的表上申請tm型別的鎖,當tm鎖獲得後,系統再自動申請tx型別的鎖。
當多個會話在表的同一條記錄上執行dml語句時,第乙個會話在該條記錄上加鎖,其他的會話處於等待狀態,當第乙個會話提交後,tx鎖會被釋放,其他的會話才可以加鎖。
當oracle資料庫產生tx鎖等待時,如果不及時處理常常會引起oracle資料庫掛起或導致死鎖的產生。
死鎖:
當兩個使用者互相等待對方釋放資源時,oracle認定為產生了死鎖,將以犧牲乙個使用者作為代價,另乙個使用者繼續執行,犧牲的使用者的事務將回滾。
例子:使用者1對a表進行update,沒有提交
使用者2對b表進行update,沒有提交
如果使用者2此時對a表做update,則會發生阻塞,需要等待使用者1的事務結束
如果此時使用者1對b表做update,則產生死鎖,此時oracle會選擇其中乙個使用者進行回滾,使另乙個使用者繼續執行操作。
(2) ddl鎖(dictionary locks字典鎖): 用於保護資料庫物件的結構,如表、索引的結構定義
問題:既然有了鎖,為什麼還要隔離級別?
事務隔離級別是併發控制的整體解決方案,其實際上是綜合利用各種型別的鎖和行版本控制來解決併發問題。
鎖是資料庫併發控制的內部機制,是基礎
對使用者來說,只有當事務隔離級別無法解決一些併發問題和需求時,才有必要在語句中手動設定鎖,不恰當的設定鎖可能導致嚴重的阻塞和死鎖。建議在完全了解鎖機制的情況下,才可以再語句中手動設定鎖,否則應該使用事務隔離級別。
oracle事務的隔離級別和鎖
1.事務的特性 acid 1 原子性 atomicity 事務所包含的資料庫操作要麼都做,要麼都不做 2 一致性 consistency 事務前後,所有的資料都保持一致的狀態 例如 事務之前a,b兩個賬戶的總和是10萬 a 4w,b 6w 現在a轉賬2w給b a 2w,b 8w a,b賬戶總和依舊是...
SQLserver鎖和事務隔離級別
隔離級別 隔離級別 髒讀不可重複讀 幻象說明 未提交讀 read uncommitted 是是 是如果其他事務更新,不管是否提交,立即執行 提交讀 read committed預設 否是 是讀取提交過的資料。如果其他事務更新沒提交,則等待 可重複讀 repeatable read 否否 是查詢期間,...
Oracle 事務隔離級別
先看一張concepts中關於事務隔離級別的一張 從上圖可以看到 通常事務的隔離級別定義為以下4種 基於3種在併發事務中需要避免的現象來劃分的 1.read uncommitted 從字面意義可以看出,讀取那些未提交的資料。事務1在事務進行過程中,會讀到事務2修改了但是沒有提交的資料,所以產生了 髒...