MySQL事務一致性理解

-Billy發表於2018-08-06

  一致性是指資料處於一種語義上的有意義且正確的狀態。一致性是對資料可見性的約束,保證在一個事務中的多次操作的資料中間狀態對其他事務不可見的。因為這些中間狀態,是一個過渡狀態,與事務的開始狀態和事務的結束狀態是不一致的。
  舉個粒子,張三給李四轉賬100元。事務要做的是從張三賬戶上減掉100元,李四賬戶上加上100元。一致性的含義是其他事務要麼看到張三還沒有給李四轉賬的狀態,要麼張三已經成功轉賬給李四的狀態,而對於張三少了100元,李四還沒加上100元這個中間狀態是不可見的。
  那麼反駁的聲音來了:
  要麼轉賬操作全部成功,要麼全部失敗,這是原子性。從例子上看全部成功,那麼一致性就是原子性的一部分咯,為什麼還要單獨說一致性和原子性?
  你說的不對。在未提交讀的隔離級別下是事務內部操作是可見的,明顯違背了一致性,怎麼解釋?
  好吧,需要注意的是:
原子性和一致性的的側重點不同:原子性關注狀態,要麼全部成功,要麼全部失敗,不存在部分成功的狀態。一致性關注資料的可見性,中間狀態的資料對外部不可見,只有最初狀態和最終狀態的資料對外可見。但是因為某某效能的關係,對於一致性做了妥協。

相關文章