Transaction ACID 事務及事務特性

2022-03-21 19:17:52 字數 1466 閱讀 6340

事務一般是針對db來討論

而且基本是討論4方面,目前的解釋都是在db上討論的

acid

a花費100 購買b的商品,整個操作整體被當成事務處理

before

a賬戶1000

b賬戶1000

after

a賬戶900

b賬戶1100

原子性

整個操作包含2個部分

1、a賬戶 1000-100=900

2、b賬戶 1000+100=1100

這兩個步驟一起成功,或者一起失敗,不能只發生其中乙個動作

一致性

如果上面2個步驟其中乙個失敗了,ab賬戶就會有金額上的損失

永續性

完成操作後,所有資料都會儲存在db

隔離性

在多事務併發執行時,事務彼此間不影響

銀行轉賬

a賬戶初始1000

b賬戶初始0

c賬戶初始900

事務1:a轉賬200 到b賬戶

事務2:c轉賬100 到b賬戶

正常執行結束後,

a:800

b:300

c:800

可能出現的問題

髒讀:

當乙個事務允許讀取另外乙個事務修改但未提交的資料時,就可能發生髒讀。

如果事務1和2 ,出現髒讀,並且乙個事務2失敗,就可能會

出現b的資料出現問題,事務2失敗,但是b中依然會有300

不可重複讀

在同乙個事務中,對於同乙份資料讀取到的結果不一致。比如,事務b在事務a提交前讀到的結果,和提交後讀到的結果可能不同。不可重複讀出現的原因就是事務併發修改記錄,要避免這種情況,最簡單的方法就是對要修改的記錄加鎖,這回導致鎖競爭加劇,影響效能。另一種方法是通過mvcc可以在無鎖的情況下,避免不可重複讀。

幻讀

在同乙個事務中,同乙個查詢多次返回的結果不一致。事務a新增了一條記錄,事務b在事務a提交前後各執行了一次查詢操作,發現後一次比前一次多了一條記錄。幻讀是由於併發事務增加記錄導致的,這個不能像不可重複讀通過記錄加鎖解決,因為對於新增的記錄根本無法加鎖。需要將事務序列化,才能避免幻讀。

隔離級別

隔離級別

髒讀

不可重複讀

幻影讀

未提交讀

可能發生

可能發生

可能發生

提交讀-

可能發生

可能發生

可重複讀--

可能發生

可序列化--

-

mysql解決事務特性 MySQL 事務和特性

一 什麼是事務 事務是資料庫操作的最小工作單位,乙個事務可以是一條sql語句,也可以是一組sql語句。事務有四大特徵 原子性,永續性,隔離性,一致性,就是我們常說的acid 二 原子性 原子性的意思是說乙個事務裡的操作會組成乙個最小的執行單位,不可再分割,在乙個事務中,要麼操作都成功,要麼都失敗。比...

事務及事務隔離級別

什麼是事務 事務是訪問資料庫的乙個操作序列,資料庫應用系統通過事務集來完成對資料庫的訪問。事務的正確執行使得資料庫從一種狀態轉換為另一種狀態。事務必須服從iso iec所制定的acid原則。acid是原子性 atomicity 一致性 consistency 隔離性 isolation 永續性 du...

事務及事務隔離級別

事務是訪問資料庫的乙個操作序列,資料庫應用系統通過事務集來完成對資料庫的訪問。事務的正確執行使得資料庫從一種狀態轉換為另一種狀態。事務必須服從iso iec所制定的acid原則。acid是原子性 atomicity 一致性 consistency 隔離性 isolation 永續性 durabili...