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