事務
事務(transaction),一般是指要做的或所做的事情。在計算機術語中是指訪問並可能更新資料庫中各種資料項的乙個程式執行單元(unit)。在計算機術語中,事務通常就是指資料庫事務。
事務的特性
事務的執行時要麼都成功,要麼都失敗。
原子性(atomicity):事務作為乙個整體被執行,包含在其中的對資料庫的操作要麼全部被執行,要麼都不執行。舉例一致性(consistency):事務應確保資料庫的狀態從乙個一致狀態轉變為另乙個一致狀態。一致狀態的含義是資料庫中的資料應滿足完整性約束。
隔離性(isolation):多個事務併發執行時,乙個事務的執行不應影響其他事務的執行。
永續性(durability):乙個事務一旦提交,他對資料庫的修改應該永久儲存在資料庫中。
用乙個常用的「a賬戶向b賬號匯錢」的例子來說明如何通過資料庫事務保證資料的準確性和完整性。熟悉關係型資料庫事務的都知道從帳號a到帳號b需要6個操作:
1、從a賬號中把餘額讀出來(500)。
2、對a賬號做減法操作(500-100)。
3、把結果寫回a賬號中(400)。
4、從b賬號中把餘額讀出來(500)。
5、對b賬號做加法操作(500+100)。
6、把結果寫回b賬號中(600)。
原子性:
保證1-6所有過程要麼都執行,要麼都不執行。一旦在執行某一步驟的過程中發生問題,就需要執行回滾操作。 假如執行到第五步的時候,b賬戶突然不可用(比如被登出),那麼之前的所有操作都應該回滾到執行事務之前的狀態。
一致性在轉賬之前,a和b的賬戶中共有500+500=1000元錢。在轉賬之後,a和b的賬戶中共有400+600=1000元。也就是說,資料的狀態在執行該事務操作之後從乙個狀態改變到了另外乙個狀態。同時一致性還能保證賬戶餘額不會變成負數等。
隔離性在a向b轉賬的整個過程中,只要事務還沒有提交(commit),查詢a賬戶和b賬戶的時候,兩個賬戶裡面的錢的數量都不會有變化。
如果在a給b轉賬的同時,有另外乙個事務執行了c給b轉賬的操作,那麼當兩個事務都結束的時候,b賬戶裡面的錢應該是a轉給b的錢加上c轉給b的錢再加上自己原有的錢。
永續性一旦轉賬成功(事務提交),兩個賬戶的裡面的錢就會真的發生變化(會把資料寫入資料庫做持久化儲存)!
原子性與隔離行
一致性與原子性是密切相關的,原子性的破壞可能導致資料庫的不一致,資料的一致性問題並不都和原子性有關。
比如剛剛的例子,在第五步的時候,對b賬戶做加法時只加了50元。那麼該過程可以符合原子性,但是資料的一致性就出現了問題。
因此,事務的原子性與一致性缺一不可。
整理oracle資料庫的事務
事務處理 增刪改都要開啟事務,事務必須提交我們的資料才會在資料庫中變更 commit 執行後會 提交事務 delete from myemp t where t.empno 7788 select from myemp 事務在沒有提交之前都可以回滾 讓之前的刪除操作失效 提交之後沒有辦法回滾 rol...
oracle 對資料庫事務的理解
事務控制命令只與dml命令 insert update delete配合使用,比如我們不會在建立表之後使用commit語句,因為當表被建立後,它會自動被提交給資料庫。也不能使用rollback語句來恢復被撤銷的表。此外,還有其他類似的語句,也不能被撤銷,例如truncate語句。所以,在執行新的命令...
Oracle資料庫的事務隔離級別
1 ansi iso sql92 標準定義了一些資料庫操作的隔離級別 l 未提交讀 read uncommitted l 提交讀 read committed l 重複讀 repeatable read l 序列化 serializable 也就是隔離級別,0,1,2,3。ansi iso sql9...