ACID,是指在數據庫管理系統(DBMS)中事務所具有的四個特性:原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation,又稱獨立性)、持久性(Durability)。
在數據庫系統中,一個事務是指由一系列數據庫操作組成的一個完整的邏輯過程。例如銀行轉帳,從原賬戶扣除金額,以及向目標賬戶添加金額,這兩個數據庫操作的總和構成一個完整的邏輯過程,不可拆分。這個過程被稱為一個事務,具有ACID特性。
原子性:
整個事務中的所有操作,要么全部完成,要么全部不完成,不可能停滯在中間某個環節。事務在執行過程中發生錯誤,會被回滾(Rollback)到事務開始前的狀態,就像這個事務從來沒有執行過一樣。
比如說,一個事務開始更新100行記錄,但是在更新了20行之后(因為某種原因)失敗了,那么此時數據庫會回滾(撤銷)對那20條記錄的修改。
一致性:
在事務開始之前和事務結束以后,數據庫的完整性約束沒有被破壞。
事務將數據庫從一個一致性狀態帶入另一個一致性狀態。 比如說,在一個銀行事務(在描述關系數據庫事務的特性時,基本上都是用銀行事務來作為描述對象的)中,需要從存儲賬戶扣除款項,然后在支付賬戶中增加款項。 如果在這個中轉的過程發生了失敗,那么絕對不能讓數據庫只執行其中一個賬戶的操作,因為這樣會導致數據處於不一致的狀態(這樣的話,銀行的賬目上,借貸就不平衡了)。
如果數據庫系統運行中發生故障,有些事物尚未完成就被迫中斷了,系統就將此事務中對數據庫的所有已經完成的操作全部撤銷,滾回到事務開始時的一致狀態。
隔離性:
兩個事務的執行是互不干擾的,一個事務不可能看到其他事務運行時,中間某一時刻的數據。
這個特性是說,直到事務結束時(commit/rollback),其他事務(或者會話)對此事務所操作的數據都不可見(但並不是說其他會話的讀取會被阻塞)。 比如說,一個用戶正在修改hr.employees表,但是沒有提交,那么其他用戶在這個修改沒有提交之前是看不到這個修改的。
持久性:
在事務完成以后,該事務所對數據庫所作的更改便持久的保存在數據庫之中,並不會被回滾。
指的是只要事務成功結束,它對數據庫所做的更新就必須永久保存下來。即使發生系統崩潰,重新啟動數據庫系統后,數據庫還能恢復到事務成功結束時的狀態。
被提交的更改會永久地保存到數據庫中(並不是說以后就不可以修改)。 事務提交之后,數據庫必須通過“恢復機制”來確保事務更改的數據不會丟失。
事務ACID特性可能遭到破壞的因素有:
1.多個事務並行運行時,不同事物的操作交叉運行;
2.事務在運行過程中被強行停止。
事務的狀態有如下幾種:
1.中止事務:執行中發生故障,不能執行完成的事務;
2.事務回滾:將中止事務對數據庫的更新撤銷掉;
3.已提交事務:成功執行完成的事務。