MySQL的四種事務隔離級別

2021-08-28 09:38:19 字數 1143 閱讀 8137

原子性(atomicity):事務是乙個不可分割的單位。事務中的操作,要麼全部做完,要麼全部不做。事務執行過程中出錯,會回滾到事務開始前的狀態,所有的操作就像沒有發生一樣。

一致性(consistency):事務開始前和結束後,資料庫的完整性約束沒有被破壞 。必須使資料庫從乙個一致性狀態變換到另乙個一致性狀態。比如a向b轉賬,不可能a扣了錢,b卻沒收到。

隔離性(isolation):同一時間,只允許乙個事務請求同一資料,不同的事務之間彼此沒有任何干擾。乙個事務的執行不能被其他事務干擾。

永續性(durability):事務一旦被提交,事務對資料庫的所有更新將被儲存到資料庫,不能回滾。

髒讀:a讀到了b更新但未提交的資料,然後b回滾操作,那麼a讀到的資料是髒資料。

不可重複讀: a 多次讀取同一資料, b在a多次讀取的過程中,對資料作了更新並提交,導致事務a多次讀取同一資料時結果不一致。

幻讀:a 多次讀取同一資料, b在a多次讀取的過程中,對資料作了插入並提交,導致事務a多次讀取同一資料時發現還有多了幾條資料,就好像發生了幻覺一樣,這就叫幻讀。

小結:不可重複讀和幻讀很容易混淆,不可重複讀側重於修改,幻讀側重於新增或刪除。解決不可重複讀的問題只需鎖住滿足條件的行,解決幻讀需要鎖表。

事務隔離級別

髒讀不可重複讀

幻讀mysql

orcale

讀未提交(read-uncommitted)

不能解決

不能解決

不能解決

√讀已提交(read-committed)

能解決不能解決

不能解決

√√預設

可重複讀(repeatable-read)

能解決能解決

不能解決

√預設序列化(serializable)

能解決能解決

能解決√√

補充:事務隔離級別為讀已提交時,寫資料只會鎖住相應的行

事務隔離級別為可重複讀時,如果檢索條件有索引的時候,預設加鎖方式是next-key 鎖;如果檢索條件沒有索引,更新資料時會鎖住整張表。乙個間隙被事務加了鎖,其他事務是不能在這個間隙插入記錄的,這樣可以防止幻讀。

事務隔離級別為序列化時,讀寫資料都會鎖住整張表

隔離級別越高,越能保證資料的完整性和一致性,但是對併發效能的影響也越大。

參考:

MySQL 四種事務隔離級別

mysql 事務都是指在 innodb 引擎下,myisam 引擎不支援事務。顯而易見,能夠讀取到,其他事務未提交的資料。既然其他事務未提交,就代表資料可能會回滾,這也意味著,可能讀取到的資料根本就不存在。特點 能讀取其它事務未提交的資料。存在事務問題 髒讀,不可重複讀,幻讀 這個隔離級別,只能讀取...

MySQL的四種事務隔離級別

一 事務的基本要素 acid 1 原子性 atomicity 事務開始後所有操作,要麼全部做完,要麼全部不做,不可能停滯在中間環節。事務執行過程中出錯,會回滾到事務開始前的狀態,所有的操作就像沒有發生一樣。也就是說事務是乙個不可分割的整體,就像化學中學過的原子,是物質構成的基本單位。2 一致性 co...

mysql的四種事務隔離級別

一 事務的基本要素 acid 1 原子性 atomicity 事務開始後所有操作,要麼全部做完,要麼全部不做,不可能停滯在中間環節。事務執行過程中出錯,會回滾到事務開始前的狀態,所有的操作就像沒有發生一樣。也就是說事務是乙個不可分割的整體,就像化學中學過的原子,是物質構成的基本單位。2 一致性 co...