1. 程式人生 > >數據庫高級應用之事務

數據庫高級應用之事務

不可 mil body 情況 blog comm rollback 安排 覆蓋

事務的基本構成:

begin transation
update 支付表 set 賬戶總額 = 賬戶總額 - n
where 賬戶名 = ‘A‘
update 支付表 set 賬戶總額 = 賬戶總額 + n
where 賬戶名 = ‘B‘
commit

成功則commit
失敗則rollback

事務進行並發出現的問題:數據庫的鎖技術:
1.丟失數據修改(T1的提交被T2所覆蓋)
2.讀臟數據(T1進行的數據修改寫入了磁盤中,T2正好使用了T1修改的數據,接著T1對先前使用數據進行撤回,導致T2的數據與原先不一致,從而導致臟讀)
3.不可重復讀(同一個事務重復讀時,發現數據前後不一致)
4.產生幽靈數據(多次使用同一數據造成的)

數據庫的鎖技術:

作用:
為了解決並發操作時出現的一些問題


排它鎖(X鎖):事務T1給數據對象加了X鎖之後,在解除之前,只有T1能夠對該數據對象進行讀和修改操作

共享鎖(S鎖):事務T1給數據對象加了S鎖之後,在解除之前,T1只能對該數據對象進行查詢操作。

封鎖協議:

一級封鎖協議:對要修改的數據對象加X鎖,直到T1執行完畢。
二級封鎖協議:在一級封鎖的前提下,對數據對象進行加S鎖,直到讀取數據完成
三級封鎖技術:在一級封鎖的前提下,對數據對象進行加S鎖,直到事務執行完畢

活鎖:T1封鎖數據R,T2也請求封鎖R。。。根據系統的先批準其他的事務,導致的一直等待的情況。
解決方法:采用先到先服務的策略。

死鎖:T1封鎖了數據R1,T2封鎖了數據R2,然後他們之間的數據相互封鎖了,然後處於一直等待的狀況
解決方法:1.采用一次封鎖法,一次性把所有要用到的數據對象進行封鎖
2.采用順序封鎖法:預先安排一個用到的數據對象進行封鎖順序(不好,當數據量多的時候不能用)

數據庫高級應用之事務