acid
a(atomicity):事物是資料庫的邏輯工作單位,事物中的諸操作要麼都做,要麼都不做。
c(consistency):事物的執行結果必須是使資料庫從乙個一致性狀態變到另乙個一致性狀態。
i(isolation):乙個事物的執行不能被其它事物干擾。
d(durability):事物一旦提交,對資料庫的改變是永久性的。
資料不一致的情況
1、丟失修改 t1和t2讀入統一資料並修改,t2的提交破壞了t1提交的結果,導致t1的修改被丟失。
eg:庫存a=10,t1中a=a-1,然後提交。t2中a=a-1,然後提交。這樣最後a=9,實際上為8。
2、不可重複讀(分為三種)
2.1、事物t1讀取某一資料後,t2對其作了修改,當事物t1再次讀取時,不一致。(update)
2.2、事物t1讀取某一資料後,t2對其作了刪除,當事物t1再次讀取時,資料消失。(delete)
2.3、事物t1讀取某一資料後,t2對其作了新增,當事物t1再次讀取時,多了一些記錄。(add)
3、髒讀 t1修改某乙個資料,回寫到磁碟後,t2讀取同一資料後,t1回滾了,t2讀到的就是髒資料。
封鎖
排它鎖(寫鎖)
共享鎖(讀鎖):事物t對a資料加上共享鎖s之後,t只能讀a,不能修改a,其它事物只能對a加共享鎖。
活鎖:一直在等待。解決方法:排隊
死鎖:解決方法
1、預防
一次封鎖法:一次將所有需要的資料封鎖。缺點:擴大資料範圍,降低效率
順序封鎖法:預先對資料物件規定乙個封鎖順序,所有事物都按照這是順序實行封鎖。
例如在b樹結構中,可以規定封鎖的順序是根節點開始,然後是下一級的子女節點,逐級封鎖。
缺點:需要維護封鎖物件,增加成本/難以確定每乙個事物要封鎖哪些物件,很難按規定的順序去施加封鎖。
2、檢測
超時檢測:認為事物等待超過了規定時間就發生了死鎖。缺點:可能誤判或者時間不好設定
等待圖法:事物為點,事物的等待為有向邊.如果發生了迴路,就表明發生了死鎖。
可序列化排程
多個事物的併發執行是正確的,當且僅當其結果與按某一次序序列地執行這些事物時的結果相同,稱這種排程策略為可序列化。
兩段鎖協議
是指所有事物必須分為兩個階段對資料項加鎖和解鎖。
1、對任何資料進行讀、寫操作之前,首先要申請並獲得對該資料的封鎖。
2、在釋放乙個封鎖之後,事物不在申請和獲得任何其它封鎖。
解釋:事物分為兩個階段,第一階段是獲得封鎖,也稱為擴充套件階段。在這個階段,事物可以申請獲得任何資料項上的任何型別的鎖,但是
不能釋放任何鎖。第二個階段是釋放封鎖,也成收縮階段。在這個階段,食物可以釋放任何資料項上的任何型別的鎖,但是不能再申請任何鎖。
遵守兩段鎖協議的一定是可序列化排程的,反之則不一定。
資料庫事務
事件是訪問並可能更新各種資料項的乙個程式執行單元。事件由事務開始與事務結束之間執行的全體操作組成。為了保證資料完整性,資料庫系統需要維護事務的以下性質 原子性 atomicity 事務中的操作要麼全部成功,要麼全部失敗。一致性 consistency 事務執行前後要保持資料庫的一致性。隔離性 iso...
資料庫 事務
資料庫事務 database transaction 是指作為單個邏輯工作單元執行的一系列操作。事務處理可以確保除非事務性單元內的所有操作都成功完成,否則不會永久更新面向資料的資源。通過將一組相關操作組合為乙個要麼全部成功要麼全部失敗的單元,可以簡化錯誤恢復並使應用程式更加可靠。乙個邏輯工作單元要成...
資料庫事務
這段時間面試,由於基礎不是特別好,遇到一些要筆試的公司。就會表示出來 今天有人問我,資料庫事務 是什麼。我只感覺十分熟悉。但是又說不出所以然。回來找了一下,現在整理記錄 1 定義 資料庫事務 database transaction 是指作為單個邏輯工作單元執行的一系列操作。事務處理可以確保除非事務...