做學問馬虎不得啊。
ACID Properties
ACID屬性
事務可以由四個基本性質來定義,簡記為首字母縮寫:ACID(原子性? atomicity、一致性? consistency、隔離性? isolation、持久性 durability)。
Atomicity
原子性
原子性保證了要么所有更新都已完成,要么全部都未發生。由于事務保證的原子性,你不需要親自編寫代碼來處理諸如一些已更新完成,其他卻失敗了的狀況。
對照剛才的關于課程安排的例子,如果從第一個課程的名單里移除此學生成功,但是添加他到第二個課程的名單時失敗,那么事務就會中止,并且此學生最終不會被從第一個課程中的名單移除。
Consistency
一致性
一致性意味著事務結束后系統的數據依然保證一致。在事務開始之前,數據保持有效的狀態,事務結束后也如此。
一致性可以用討論原子性時的同樣情形,即把一個學生從一個課程轉移到另一個來描述。如果把學生從第一個課程移除失敗,但是添加到第二個課程成功,那么這個學生將被同時登記在兩個課程上。這是不合法的情形,數據庫的數據將不能保持一致。一致性表
示,事務的結果必須使數據庫仍保持數據一致的狀態。所以事務的部分操作失敗的話,所有其他部分也要回到原先的狀態,就象什么都沒發生一樣。
Isolation
隔離性
多個用戶可能同時對同一個數據庫進行操作。隔離性保證了在事務完成之前,該事務外部不能看到事務里的數據的改變。也不能訪問一些中間狀態,因為假如事務終止的話,這些狀態將永遠不會發生。
如果你做一個查詢來獲取所有課程的學生名單,與此同時,一個事務正在運行,把一個學生從一個課程轉移到另外一個,那么兩個課程的名單上都不會出現這個學生。隔離性保證了事務外無法看到事務內的任何中間狀態或結果。
Durability
持久性
持久性意味著即便是系統當機也能保證一致性的狀態。如果一個數據庫系統當機,它必須保證已完成的事務確實已經寫入數據庫。
---面試前腦子中還迸出這個問題,結果人家真的問到了,運氣好,運氣差。