事務概念數據庫
事務能夠用不少不少不一樣的方式去定義。事務是數據庫操做執行的一個邏輯工做單元,是用戶定義的一個數據庫操做序列,這些操做要麼全作要麼全不作,是一個不可分割的工做單位。例如, 在關係數據庫中, 一個事務能夠是一條SQL語句、一組SQL語句或整個程序。事務和程序是兩個概念。通常地講, 一個程序中包含多個事務。事務的開始與結束能夠由用戶顯式控制。若是用戶沒有顯式地定義事務, 則由DBMS按缺省規定自動劃分事務。併發
事務特性生命週期
在數據庫系統中,一個事務是指由一系列數據庫操做組成的一個完整的邏輯過程。例如銀行轉賬,從原帳戶扣除金額,以及向目標帳戶添加金額,這兩個數據庫操做的總和,構成一個完整的邏輯過程,不可拆分。這個過程被稱爲一個事務,具備ACID特性。事務
- 原子性(Atomicity):一個事務(transaction)中的全部操做,要麼所有完成,要麼所有不完成,不會結束在中間某個環節。事務在執行過程當中發生錯誤,會被回滾(Rollback)到事務開始前的狀態,就像這個事務歷來沒有執行過同樣。
- 一致性(Consistency):在事務開始以前和事務結束之後,數據庫的完整性沒有被破壞。這表示寫入的資料必須徹底符合全部的預設規則,這包含資料的精確度、串聯性以及後續數據庫能夠自發性地完成預約的工做。
- 隔離性(Isolation):當兩個或者多個事務併發訪問(此處訪問指查詢和修改的操做)數據庫的同一數據時所表現出的相互關係。事務隔離分爲不一樣級別,包括讀未提交(Read uncommitted)、讀提交(read committed)、可重複讀(repeatable read)和串行化(Serializable)。
- 持久性(Durability):在事務完成之後,該事務對數據庫所做的更改便持久地保存在數據庫之中,而且是徹底的。
事務目的ci
事務在數據庫系統中主要有兩個目的:it
1.提供一個可靠的工做單元,可以從失敗中恢復到正確的狀態。若是發生系統錯誤,執行操做語句中斷(所有中斷或部分中斷)或者是許多操做沒有完成或不知道其狀態下,依舊保持數據庫正常運行。io
2.在程序訪問數據庫之間提供一個隔離。若是不提供這種隔離,程序可能返回不許確的結果。table
事務類型程序
- 自動提交的事務 -- 每個單獨的語句都是一個事務
- 顯示聲明的事務 -- 明顯的以BEGIN TRAN開始,而且以ROLLBACK TRAN或者是COMMIT TRAN結尾的語句。
- 隱含事務 -- SQL Server會在當前事務被提交或回滾後自動啓動一個新的事務,這個新事務直到用戶執行COMMIT或ROLLBACK爲止, 這時系統又會啓動一個新事務。這樣就造成了一個連續的事務鏈。
經常使用的事務操做數據
- BEGIN TRANSACTION – 開始事務,事務開始保存點
- ROLLBACK TRANSACTION – 回滾事務,因爲出現錯誤,回滾數據到事務開始以前
- COMMIT TRANSACTION – 提交事務,保存數據到數據庫中
完整的事務生命週期
1.事務開始
2.執行數據庫操做語句(一個或多個)
3.若是沒有錯誤發生,提交事務而且事務結束
4.若是出現了錯誤,回滾到事務開始以前而且事務結束