事務與併發控制

事務與併發控制

1.事務

事務的概念:

事務是用戶定義 的一個數據庫的操作序列,這些操作要麼全做要麼全不做,是一個不能分割的工作單元,這樣的數據庫的操作序列稱爲事務。

事務的特性:

原子性、一致性、隔離性、持久性,簡稱ACID性。

原子性:

事務是不可分割的工作單元,事務裏面 的操作要麼全做要麼全不做。不能出現事務裏的操作有的執行了,有的沒執行。

原子性示例:

事務T從賬戶A轉100給賬戶B

T:read(A);

A=A-100;

write(A);

read(B);

B=B+100;

write(B);

對於事務T的任意步驟,如果其中有步驟執行失敗的,那其他步驟即使成功也要回退,事務執行失敗。就是通常說的,一榮俱榮,一損俱損。

一致性:

事務執行時要保持數據庫的一致性。即事務執行完畢後,要保證數據

什麼是不一致?

還是上面的事務T,比如事務T未執行前,賬戶A=1000;賬戶B=2000;

執行完write(A)後,系統故障了,這就導致賬戶A少了100,但是B卻沒有增加100。這種狀態就是不一致。

隔離性:

不同事務互不干擾,即使是併發執行的事務,一個事務內部如何執行,也不能被其他事務看到。

隔離性怎麼體現的?

如果事務A執行到B=B+100;但是B並沒有寫回數據庫的時候,出現了數據庫的暫時不一致,事務T2開始讀取A和B,那結果是900+2000=2900;那麼事務T2基於不一致的值對A和B進行操作,是會出大問題 的。所以隔離性要求事務T沒執行完的時候,其他事務看不到T內部的東西,也就是說,在T操作A,B的時候,其他事務不能訪問事務T產生的中間結果,直到T結束掉。這樣可以解決一部分問題,但是仍然不夠。

持久性:

事務執行完畢後,它對數據庫的改變是永久的,就是說如果事務更新了數據,那數據應該被寫在外存上。

持久性的 體現?

事務T對A和B的操作結果,應該被記錄到數據庫裏,而且數據庫應該是保存在磁盤上,而不是臨時內存區。這樣當T結束後,它對數據A和B的修改是永久的,其他事務再訪問A和B,也讀到的是事務T改變後的A和B.

事務的狀態:

活躍狀態:

表示事務正在進行,事務一旦開始就進入了活躍狀態。

部分提交狀態:

操作全部完成後,但是輸出還在臨時內存上,此時是部分提交狀態。

失敗狀態:

事務執行時出故障,進入失敗狀態。

中止狀態:

事務失敗後,數據庫管理系統會恢復被事務影響的 數據(回滾),然後進入中止態

提交狀態:

事務成功,把數據輸出到永久內存上了,這是提交狀態。

事務中止後:

1.重啓事務:事務本身並沒有錯,可以重啓,但被當成新事務。

2.殺死事務:事務有嚴重的錯誤,需要殺死該事務。

2.併發控制

3.併發調度串行化

4.基於鎖的協議

5.兩階段鎖協議

6.多粒度封鎖

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章