在程序員面試中,經(jīng)常會被問到事務(wù),比如:談?wù)勀銓κ聞?wù)的理解惋鸥?
?????????事務(wù)(Transaction),是指訪問并可能更新數(shù)據(jù)庫中各種數(shù)據(jù)項的一個程序執(zhí)行單元(Unit)悍缠,通俗點也就是指針對數(shù)據(jù)庫中形形色色的數(shù)據(jù)卦绣,我們進(jìn)行一些存取操作。
?????????在數(shù)據(jù)庫操作中飞蚓,一項事務(wù)是指由一條或多條對數(shù)據(jù)庫更新的sql語句所組成的一個不可分割的工作單元滤港。只有當(dāng)事務(wù)中的所有操作都正常完成了,整個事務(wù)才能被提交到數(shù)據(jù)庫玷坠,如果有一項操作沒有完成蜗搔,就必須撤消整個事務(wù)。
????????事務(wù)四大特征:原子性八堡,一致性樟凄,隔離性和持久性。
????????1. 原子性(Atomicity)
????????????????一個原子事務(wù)要么完整執(zhí)行兄渺,要么干脆不執(zhí)行缝龄。這意味著,工作單元中的每項任務(wù)都必須正確執(zhí)行挂谍。如果有任一任務(wù)執(zhí)行失敗叔壤,則整個工作單元或事務(wù)就會被終止。即此前對數(shù)據(jù)所作的任何修改都將被撤銷口叙。如果所有任務(wù)都被成功執(zhí)行炼绘,事務(wù)就會被提交,即對數(shù)據(jù)所作的修改將會是永久性的妄田。
????????2. 一致性(Consistency)
????????????????一致性代表了底層數(shù)據(jù)存儲的完整性俺亮。它必須由事務(wù)系統(tǒng)和應(yīng)用開發(fā)人員共同來保證驮捍。事務(wù)系統(tǒng)通過保證事務(wù)的原子性,隔離性和持久性來滿足這一要求;應(yīng)用開發(fā)人員則需要保證數(shù)據(jù)庫有適當(dāng)?shù)募s束(主鍵脚曾,引用完整性等)东且,并且工作單元中所實現(xiàn)的業(yè)務(wù)邏輯不會導(dǎo)致數(shù)據(jù)的不一致(即,數(shù)據(jù)預(yù)期所表達(dá)的現(xiàn)實業(yè)務(wù)情況不相一致)本讥。例如珊泳,在一次轉(zhuǎn)賬過程中,從某一賬戶中扣除的金額必須與另一賬戶中存入的金額相等拷沸。
????????3. 隔離性(Isolation)
????????????????隔離性意味著事務(wù)必須在不干擾其他進(jìn)程或事務(wù)的前提下獨立執(zhí)行色查。換言之,在事務(wù)或工作單元執(zhí)行完畢之前堵漱,其所訪問的數(shù)據(jù)不能受系統(tǒng)其他部分的影響综慎。
????????4. 持久性(Durability)
????????????????持久性表示在某個事務(wù)的執(zhí)行過程中,對數(shù)據(jù)所作的所有改動都必須在事務(wù)成功結(jié)束前保存至某種物理存儲設(shè)備勤庐。這樣可以保證示惊,所作的修改在任何系統(tǒng)癱瘓時不至于丟失。