事務一般是針對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...