《資料庫系統概念》第14章知識點總結
事務
事務是通路并可能更新各種資料項的一個程式執行單元。事務通常由進階資料操作語言或程式設計語言通過JDBC或ODBC嵌入式資料庫通路書寫的使用者程式的執行所引起。事務用形如begin transaction和end transaction語句來界定。
事務的特性
(1)原子性:事務的所有操作在資料庫中要麼全部正确反映出來,要麼完全不反映
(2)一緻性:隔離執行事務時保持資料庫的一緻性
(3)持久性:一個事務成功完成後,它對資料庫的改變必須是永久的,即使出現系統故障
(4)隔離性:盡管多個事務可能并發執行,但系統保證,對于任何一對事務Ti和Tj,在Ti看來,Tj或者在Ti開始之前已經完成執行,或者在Ti完成之後開始執行。是以,每個事務都感覺不到系統中有其他事務在并發地執行。
一個簡單的事務模型
read(X):從資料庫把資料項X傳送到執行read操作的事務的主存緩沖區的一個也稱為X的變量中
write(X):從執行write的事務的主存緩沖區的變量X中把資料項X傳回資料庫中
存儲結構
易失性存儲器:通常資訊在系統崩潰後不會幸存
非易失性存儲器:資訊會在系統崩潰後幸存
穩定性存儲器:資訊永遠不會丢失
事務原子性和持久性
事務的五個狀态
活動的:初始狀态,事務執行時處于這個狀态
部分送出的:最後一個語句執行
失敗的:發現偵察和那個的執行不能繼續後
中止的:事務復原并且資料庫已恢複到事務開始執行前的狀态後
送出的:成功完成後
事務進入中止态時,系統的兩種操作
重新開機事務:僅當引起事務中止的是硬體錯誤或不是由事務的内部邏輯所産生的軟體錯誤。
殺死事務:這樣做通常是由于事務的内部邏輯造成的錯誤。
并發事務的好處
提高吞吐量和資源使用率
減少等待時間
事務隔離性和原子性
可恢複排程:對于每對事務Ti和Tj,如果Tj讀取了之前由Ti所寫的資料項,則Ti先于Tj送出。
無級聯排程:對于每對事務Ti和Tj,如果Tj讀取了先前由Ti所寫的資料項,則Ti必須在Tj這一讀操作前送出
事務隔離性級别
可串行化:通常保證可串行化排程
可重複讀:隻允許讀取已送出資料
已送出讀:隻允許讀取已送出資料
未送出讀:允許讀取未送出資料
以上所有隔離性級别都不允許髒寫,即如果一個資料項已經被另一個尚未送出或中止的事務寫入,則不允許對該資料項執行寫操作
隔離性級别的實作
鎖
共享鎖:用于事務讀的資料項,S
排它鎖:用于事務寫的資料項,X
時間戳
多版本和快照隔離