1. 程式人生 > >oracle事務的四個特性(ACID)

oracle事務的四個特性(ACID)

失敗 會話 狀態 服務 可能 ccf 保持 16px 其他

事務產生的背景

當在PL/SQL中同時操作多個SQL語句,比如通過DML語句添加、修改或刪除數據時,如何確保數據庫數據不會因為意外而倒置錯誤數據是一個非常重要的問題。

以倉庫發料系統為例,如果某一張領料單已經領了料,那麽倉庫中的物料就要減少,如果因為某些意外的原因,只是領料單的料數多了,而倉庫中的物料沒有減少,就會造成數據錯誤,使得整個倉庫庫管理系統數據變得混亂,進而影響到整個公司的運作。

數據庫管理系統提供了事務處理的機制以確保數據的完整性和一致性。

事務(Transaction)是一個由多條SQL語句組成的工作邏輯單元,這些語句要麽全部執行成功,要麽全都不執行,只要有一條SQL語句執行失敗,則已執行的SQL語句會回滾到執行之前的狀態,這樣就保證了數據庫數據的一致性,不至於產生混亂的數據信息。

事務的四個特性(ACID)

熟悉SQL Server的用戶很快會發現,Oracle中的事務處理與SQL Server有較明顯的區別。

在SQL Server中,每一個DML語句都具有一個隱式的事務,語句執行結束時事務被自動提交到服務器端,除非顯式地通過一條事務語句開始一個事務。

而在Oracle中,當第一條SQL語句開始執行時,一個新的事務自動開始,除非顯式地使用COMMIT進行提交,或者是使用ROLLBACK進行回滾,或者是退出某個Oracle工具時,這些事務才結束,否則SQL語句的操作僅在會話級別進行,並沒有保存到數據庫中。

由於事務處理要確保事務內數據操作的一致性,因此一個事務必須要滿足所謂的ACID,即原子性、一致性、隔離性和持久性這4個特性。

原子性(Atomicity)

事務必須是原子工作單元,對其進行的數據修改,要麽全都執行,要麽全都不執行。

以網上銀行轉賬為例,要在A賬戶上增加1000元,同時要在B賬戶上減少1000元。要麽同時執行,要麽都不執行更改,以確保整個事務是一個原子工作單元。

一致性(Consistency)

事務在完成時,必須使所有的數據都保持一致狀態,即所有的數據都要發生更改,以保證數據的完整性。在銀行轉賬時,A賬戶和B賬戶的數據都要發生更改,以保證數據的完整性。

隔離性(Isolation)

兩個事務的執行是互不幹擾的,一個事務不可能看到其他事務運行時、運行中間某一時刻的數據。比如銀行轉賬操作時,如果有其他的會話也在進行轉賬,那麽當前事務內不能看到其他事務在運行時或運行中間某一時刻的數據。

持久性(Durability)

一旦事務被提交之後,數據庫的變化就會被永遠保留下來,即使運行數據庫軟件的機器後來奔潰也是如此。銀行轉賬一旦操作完成,數據就會被永久地保留下來了,即使數據庫系統關閉也不會丟失數據。

oracle事務的四個特性(ACID)