Acid

事務原子性意味著一致性

  • January 22, 2020

據說事務需要原子性和一致性。但是,一致性的意義何在?

一旦您確保在匯款時更新兩個帳戶,您就可以保持一致。維基百科關於一致性的文章說,一致性是一組程序約束、不變數。但是您可以自由地以任何方式編寫您的事務操作。所以,我覺得程序員只需要原子性、隔離性和持久性。一致性是一個額外的便利數據庫工具,如觸發器或儲存過程,並不是絕對的低級要求。給定AID,程序員總能保證一致性。這是一個簡單的檢查使用者數據並在某些規則被破壞時拒絕請求。正確的?

看起來 Wikipedia在 Data Consistency文章中將 Atomicity 與 Consistency 確定為一致,但在 ACID 事務的文章中卻沒有。

聽聽最終的一致性,我看到開發人員的意思是數據庫總是處於某種正確的快照狀態,即數據是穩定的,您可以在數據庫上查詢/發出您的事務,如果數據庫在轉換中可用,您將無法做到這一點。也就是說,一致的數據庫是在任何時候都滿足約束的數據庫。但是,如果操作是原子的,則它滿足約束。原子性意味著我們只看到事務結果,這意味著我們只看到快照,這意味著一致性。為什麼您需要將一致性單選出來,就好像它是獨立的財產一樣?

事務原子性意味著一致性

這不是真的。為不存在的客戶添加訂單的事務是原子的,但會使數據不一致。

按照您的範例,一致的銀行交易必須保證所有借方和貸方的總和正好為 0。原子交易必須只保證所有必要的表或沒有更新,但不說明它們更新的值和。

原子性是用於確保數據一致性的工具之一,但不是唯一的工具。

這就是我得到它的方式。如果使用者可以看到部分應用的事務(違反原子性),您最終可能會導致數據庫不一致。但是,如果事務本身很瘋狂並且沒有包含所有應該以原子方式完成的操作,也會導致相同的損壞視圖。因此,考慮到原子性,我們確實可以始終實現數據庫的一致視圖/快照。但是,DB 使用者更喜歡處理能夠將狀態轉換限制為僅合法狀態轉換的數據庫。因此,原子性確保 DB 使用者使用穩定的狀態,而一致性確保只有有效的狀態轉換才能發生。

引用自:https://dba.stackexchange.com/questions/131968