一致性是指資料處於一種語義上的有意義且正確的狀態。一致性是對資料可見性的約束,保證在乙個事務中的多次操作的資料中間狀態對其他事務不可見的。因為這些中間狀態,是乙個過渡狀態,與事務的開始狀態和事務的結束狀態是不一致的。
舉個栗子,張三給李四轉賬100元。事務要做的是從張三賬戶上減掉100元,李四賬戶上加上100元。一致性的含義是其他事務要麼看到張三還沒有給李四轉賬的狀態,要麼張三已經成功轉賬給李四的狀態,而對於張三少了100元,李四還沒加上100元這個中間狀態是不可見的。
那麼反駁的聲音來了:
要麼轉賬操作全部成功,要麼全部失敗,這是原子性。從例子上看全部成功,那麼一致性就是原子性的一部分咯,為什麼還要單獨說一致性和原子性?
你說的不對。在未提交讀的隔離級別下是事務內部操作是可見的,這時候會出現髒讀,明顯違背了一致性,怎麼解釋?
好吧,你的疑問很有道理,也很充分,這正說明你對事務的acid特性理解的很到位。不過,需要注意的是:
原子性和一致性的的側重點不同:原子性關注狀態,要麼全部成功,要麼全部失敗,不存在部分成功的狀態。而一致性關注資料的可見性,中間狀態的資料對外部不可見,只有最初狀態和最終狀態的資料對外可見。
在未提交讀的隔離級別下,會造成髒讀,這就是因為乙個事務讀到了另乙個事務操作內部的資料。acid中是的一致性描述的是乙個最理想的事務應該怎樣的,是乙個強一致性狀態,如果要做到這點,需要使用排它鎖把事務排成一隊,即serializable的隔離級別,這樣效能就大大降低了。現實是骨感的,所以使用隔離性的不同隔離級別來破壞一致性,來獲取更好的效能。
資料庫一致性
資料庫一致性 database consistency 是指事務執行的結果必須是使資料庫從乙個一致性狀態變到另乙個一致性狀態。保證資料庫一致性是指當事務完成時,必須使所有資料都具有一致的狀態。在關係型資料庫中,所有的規則必須應用到事務的修改上,以便維護所有資料的完整性。保證資料庫的一致性是資料庫管理...
對事務一致性的理解
要想真正弄清楚這個問題,那是必須要把資料庫理論中的事務機制從頭開始看起,牽扯的內容比較多。當然,如果只是想粗略的了解下,我就來舉個例子吧 當然不可能太嚴謹。假設我們10個人,每人有乙個賬號,裡面有錢,可以轉來轉去,這組成了乙個小型的資料系統,那麼什麼叫資料一致性?這是由你自己來定義的,比較通用的就是...
事務的一致性
首先,我們需要搞清楚為什麼會出現事務.這句話的大體含義就是,事務的產生,其實是為了當應用程式訪問資料庫的時候,事務能夠簡化我們的程式設計模型,不需要我們去考慮各種各樣的潛在錯誤和併發問題.可以想一下當我們使用事務時,要麼提交,要麼回滾,我們不會去考慮網路異常了,伺服器宕機了,同時更改乙個資料怎麼辦對...