ACID,指資料庫事務正確執行的四個基本要素的縮寫.包含:原子性(Atomicity)、一致性 (Consistency)、隔離性(Isolation)、持久性(Durability)。一個支援交易(Transaction)的 資料庫系統,必需要具有這四種特性,否則在交易過程(Transaction processing)當中無法保證資料 的正確性,交易過程極可能達不到交易方的要求.
原子性 (ATOMICITY)
整個事務中的所有操作,要麼全部完成,要麼全部不完成,不可能停滯在中間某個環節。事務在執 行過程中發生錯誤,會被復原(Rollback)到事務開始前的狀態,就像這個事務從來沒有執行過一樣。
一致性 (CONSISTENCY)
在事務開始之前和事務結束以後,資料庫的完整性條件約束沒有被破壞。
隔離性 (ISOLATION)
兩個事務的執行是互不干擾的,一個事務不可能看到其他事務運行時,中間某一時刻的資料。
持久性 (DURABILITY)
在事務完成以後,該事務所對資料庫所作的更改便持久的儲存在資料庫之中,並不會被復原。
一交易處理介紹
事務是這樣一種機制,它確保多個SQL語句被當作單個工作單元來處理。事務具有以下的作用:
* 一致性:同時進行的查詢和更新彼此不會發生衝突,其他使用者不會看到發生了變化但尚未提交的 資料。
* 可恢複性:一旦系統故障,資料庫會自動地完全恢複未完成的事務。
二事務與一致性
事務是完整性的單位,一個事務的執行是把資料庫從一個一致的狀態轉換成另一個一致的狀態。因 此,如果事務孤立執行時是正確的,但如果多個事務並發交錯地執行,就可能相互幹擾,造成資料庫狀 態的不一致。在多使用者環境中,資料庫必須避免同時進行的查詢和更新發生衝突。這一點是很重要的, 如果正在被處理的資料能夠在該處理正在運行時被另一使用者的修改所改變,那麼該處理結果是不明確的 。
不加控制的並發存取會產生以下幾種錯誤:
1 丟失修改(lost updates)
當多個事務並發修改一個資料時,不加控制會得出錯誤的結果,一個修改會覆蓋掉另一個修改。
2 讀的不可重複性
當多個事務按某種時間順序存取若干資料時,如果對並發存取不加控制,也會產生錯誤。
3 髒讀(DIRDY DATA),讀的不一致性
4 游標帶來的當前值的混亂
事務在執行過程中它在某個表上的當前尋找位置是由游標表示的。游標指向當前正處理的記錄。當 處理完該條記錄後,則指向下一條記錄。在多個事務並發執行時,某一事務的修改可能產生負作用,使 與這些游標有關的事務出錯。
5 未釋放修改造成連鎖退出
一個事務在進行修改操作的過程中可能會發生故障,這時需要將已做的修改回退(Rollback)。如 果在已進行過或已發現錯誤尚未複原之前允許其它事務讀已做過修改(髒讀),則會導致連鎖退出。
6 一事務在對一表更新時,另外的事務卻修改或刪除此表的定義。
資料庫會為每個事務自動地設定適當層級的鎖定。對於前面講述的問題:髒讀、未釋放修改造成的 連鎖退出、一事務在對一表更新時另外的事務卻修改或刪除此表的定義,資料庫都會自動解決。而另外 的三個問題則需要在編程過程中人為地定義事務或加鎖來解決。