MySQL事務四大特性與隔離級別

2021-09-29 00:16:22 字數 1212 閱讀 2812

​ 1、原子性:是指乙個方法裡的操作要同時成功或者同時失敗。

​ 2、一致性:事務前後資料的完整性必須保持一致。

​ 3、隔離性:要保證資料之間不能相互影響,有四種隔離等級。

​ 4、永續性:指乙個事務一旦被提交,它對資料庫中資料的改變就是永久性的,接下來即使資料庫發生故障也不應該對其有任何影響。

​ 一致性:簡單打個比方,比如兩個賬戶之間的轉賬,轉賬前為a狀態,轉賬後為b狀態。a狀態下兩個賬戶加起來有100元,轉賬之後到b狀態,兩個賬戶加起來應該還是100元,這叫一致性。如果乙個賬戶扣了錢,而另乙個賬戶沒有加錢,兩個賬戶加起來就小於100元了,此時就破壞了資料的一致性。

​ 而原子性強調的是,同時成功或同時失敗,比如上述的扣錢操作和另乙個賬戶的加錢操作要保證原子性,要麼同時成功,要麼同時失敗。原子性是保證資料一致性的一種手段,但並不是唯一的手段。再併發情況下,即使能保證原子性,也不一定能保證資料的一致性。

​ 假設現在有a、b兩個事務正在操作同乙個庫的同乙個表中的資料。

​ 1讀未提交read uncommitted 相當於兩個事務完全摻雜在了一起,a一改變不用提交,b立馬知道。這種級別會有髒讀問題,當然就更有不可重複讀,幻讀問題。

​ 2讀已提交read committed 相當於兩個事務有摻雜,a提交以後,b才知道a的變化。a一改變並提交在b的事務中就知道了。解決了髒讀,但會有不可重複讀問題,當然更有幻讀問題。

​ 3可重複讀repeatable read 相當於兩個事務有摻雜,a提交以後,b不知道a的變化。即在b事務中不知道,只有b的當前事務結束了,再開啟另乙個事務才知道a的變化,這就解決了不可重複讀問題。

​ 但是在事務中如果a事務通過增刪方式改變,b事務中是知道的,因為不涉及同乙個資料,所以不影響安全,所以允許這種現象發生,這就是幻讀問題。

​ 4序列化serializable 相當於兩個事務完全隔離,ab兩個事務不能同時執行,只能排隊執行。不會產生任何資料安全問題。

​ 隔離等級由1到4,逐漸提高,但效能也會降低,特別是最高等級時相當於加了同步鎖,效率極低。其中可重複讀隔離性已經很高了,但不能解決併發問題,併發時有可能導致破壞一致性,序列化是最高隔離級別,可以解決併發問題,但效率很低,一般不採用。解決併發問題可以用樂觀鎖機制,效率高,不阻塞。

​ 考慮到執行效率,mysql資料庫採用可重複讀repeatable read這個等級。這個等級的隔離級別已經很高了,解決了髒讀,不可重複讀問題,但是會有幻讀問題。不過,mysql在這個級別中做了處理,解決了幻讀的問題。解決方法可以參考

mysql引擎,事務 (隔離級別,四大特性)

讀未提交,顧名思義,就是乙個事務可以讀取另乙個未提交事務的資料。讀已提交,顧名思義,就是乙個事務要等另乙個事務提交後才能讀取資料。可重複讀,就是在開始讀取資料 事務開啟 時,不再允許修改操作 可序列化是最高的事務隔離級別,在該級別下,事務序列化順序執行,可以避免髒讀 不可重複讀與幻讀。但是這種事務隔...

MySQL事務四大特徵以及四種事務隔離級別

一 mysql事務的四大特性 acid 1.原子性 atomicity 原子性是指乙個事務的操作要麼全部成功,要麼全部失敗回滾。保證事務的操作成功則全部應用到資料庫,失敗則不能對資料庫產生任何影響。2.一致性 consistency 一致性是指事務必須從乙個一致性狀態轉換到另乙個一致性狀態。也就是乙...

事務四大特性

1 原子性 將事務中所做的操作 成乙個原子單元,即對於事務所進行的資料修改等操作,要麼全部執行,要麼全部不執行。2 一致性 事務執行的結果必須是使資料庫從乙個一致性狀態變到另乙個一致性狀態。事務在完成時,必須使所有的資料都保持一致狀態,而且在相關資料中,所有規則都必須應用於事務的修改,以保持所有資料...