MySQL事務一致性理解

2022-04-30 18:54:10 字數 1393 閱讀 3960

一致性是指資料處於一種語義上的有意義且正確的狀態。一致性是對資料可見性的約束,保證在乙個事務中的多次操作的資料中間狀態對其他事務不可見的。因為這些中間狀態,是乙個過渡狀態,與事務的開始狀態和事務的結束狀態是不一致的。

舉個粒子,張三給李四轉賬100元。事務要做的是從張三賬戶上減掉100元,李四賬戶上加上100元。一致性的含義是其他事務要麼看到張三還沒有給李四轉賬的狀態,要麼張三已經成功轉賬給李四的狀態,而對於張三少了100元,李四還沒加上100元這個中間狀態是不可見的。

那麼反駁的聲音來了:

要麼轉賬操作全部成功,要麼全部失敗,這是原子性。從例子上看全部成功,那麼一致性就是原子性的一部分咯,為什麼還要單獨說一致性和原子性?

你說的不對。在未提交讀的隔離級別下是事務內部操作是可見的,明顯違背了一致性,怎麼解釋?

好吧,需要注意的是:

原子性和一致性的的側重點不同:原子性關注狀態,要麼全部成功,要麼全部失敗,不存在部分成功的狀態。一致性關注資料的可見性,中間狀態的資料對外部不可見,只有最初狀態和最終狀態的資料對外可見

隔離性是多個事物的時候, 相互不能干擾,一致性是要保證操作前和操作後資料或者資料結構的一致性,而我提到的事務的一致性是關注資料的中間狀態,也就是一致性需要監視中間狀態的資料,如果有變化,即刻回滾

(一系列操作後,所有的操作和更新全部提交成功,資料庫只包含全部成功後的資料就是資料的一致性)

一致性是指資料處於一種語義上的有意義且正確的狀態。一致性是對資料可見性的約束,保證在乙個事務中的多次操作的資料中間狀態對其他事務不可見的。因為這些中間狀態,是乙個過渡狀態,與事務的開始狀態和事務的結束狀態是不一致的。

舉個粒子,張三給李四轉賬100元。事務要做的是從張三賬戶上減掉100元,李四賬戶上加上100元。一致性的含義是其他事務要麼看到張三還沒有給李四轉賬的狀態,要麼張三已經成功轉賬給李四的狀態,而對於張三少了100元,李四還沒加上100元這個中間狀態是不可見的。

那麼反駁的聲音來了:

要麼轉賬操作全部成功,要麼全部失敗,這是原子性。從例子上看全部成功,那麼一致性就是原子性的一部分咯,為什麼還要單獨說一致性和原子性?

你說的不對。在未提交讀的隔離級別下是事務內部操作是可見的,明顯違背了一致性,怎麼解釋?

好吧,需要注意的是:

原子性和一致性的的側重點不同:原子性關注狀態,要麼全部成功,要麼全部失敗,不存在部分成功的狀態。一致性關注資料的可見性,中間狀態的資料對外部不可見,只有最初狀態和最終狀態的資料對外可見

隔離性是多個事物的時候, 相互不能干擾,一致性是要保證操作前和操作後資料或者資料結構的一致性,而我提到的事務的一致性是關注資料的中間狀態,也就是一致性需要監視中間狀態的資料,如果有變化,即刻回滾

對事務一致性的理解

要想真正弄清楚這個問題,那是必須要把資料庫理論中的事務機制從頭開始看起,牽扯的內容比較多。當然,如果只是想粗略的了解下,我就來舉個例子吧 當然不可能太嚴謹。假設我們10個人,每人有乙個賬號,裡面有錢,可以轉來轉去,這組成了乙個小型的資料系統,那麼什麼叫資料一致性?這是由你自己來定義的,比較通用的就是...

事務的一致性

首先,我們需要搞清楚為什麼會出現事務.這句話的大體含義就是,事務的產生,其實是為了當應用程式訪問資料庫的時候,事務能夠簡化我們的程式設計模型,不需要我們去考慮各種各樣的潛在錯誤和併發問題.可以想一下當我們使用事務時,要麼提交,要麼回滾,我們不會去考慮網路異常了,伺服器宕機了,同時更改乙個資料怎麼辦對...

事務的原子性 一致性 隔離性和永續性理解

事務是指對系統進行的一組操作,為了保證系統的完整性,事務需要具有acid特性,具體如下 1.原子性 atomic 乙個事務包含多個操作,這些操作要麼全部執行,要麼全都不執行。實現事務的原子性,要支援回滾操作,在某個操作失敗後,回滾到事務執行之前的狀態。回滾實際上是乙個比較高層抽象的概念,大多數db在...