MySQL 四種事務隔離級別

2021-10-21 02:44:45 字數 1276 閱讀 8166

mysql 事務都是指在 innodb 引擎下,myisam 引擎不支援事務。

顯而易見,能夠讀取到,其他事務未提交的資料。

既然其他事務未提交,就代表資料可能會回滾,這也意味著,可能讀取到的資料根本就不存在。

特點:能讀取其它事務未提交的資料。

存在事務問題:髒讀,不可重複讀,幻讀

這個隔離級別,只能讀取到資料已經提交的資料。

但此時依然存在問題,如圖

在事務a執行的過程中,事務a使用到的資料被事務b所修改,此時事務a再去執行更新操作,就更新不到資料了。

特點:已提交讀隔離級別解決了髒讀的問題,但是出現了不可重複讀的問題。即事務a在兩次查詢的資料不一致,因為在兩次查詢之間事務b更新了一條資料。已提交讀只允許讀取已提交的記錄,但不要求可重複讀。

解決事務問題:髒讀

存在事務問題:不可重複讀,幻讀

不可重複讀圖例:

可重複讀解決了上面不可重複讀的問題,保證在乙個事務中,可讀到的資料都是事務開始時的資料。

如下圖所示:

在事務a剛開始執行列表查詢時,能查到 5 條資料,此時事務b執行了新增語句,此時事務a進行列表查詢時能查到 6 條資料,這就是幻讀。明明一開始是 5 條,怎麼再查一次變 6 條了,難道出現了幻覺?

這個結果並不能說是錯誤,主要要根據業務邏輯而定。

而可重複讀,也是 mysql 資料庫預設的隔離級別設定。

ps:mysql innodb 引擎在可重複讀隔離級別,就幾乎已經解決了幻讀問題。

解決事務問題:髒讀,不可重複讀

存在事務問題:幻讀

幻讀圖例:

特點:就像他的名稱一樣,特點就是所有事務以序列的方式去執行。事務a執行完,才會執行事務b。

缺點:代價也很明顯,大大降低了執行效率。

解決事務問題:髒讀,不可重複讀,幻讀

事務四種隔離級別

1.讀取未提交 乙個事務可以讀取另乙個未提交的事務的資料。髒讀 2.讀取已提交 事務a多次讀取同一資料,事務b在事務a多次讀取的過程中,對資料做了更新並提交,導致事務a多次讀取同一資料時,結果不一致。不可重複度 對應update操作 3.可重複讀 開始讀取資料時 事務開啟時 不在允許修改操作。可能會...

MySQL的四種事務隔離級別

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

mysql的四種事務隔離級別

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