天天看點

關于MySQL 事務隔離級别 Read committed(讀以送出)會出現隔離機制失效

上完了MySQL課程 的事務隔離機制後,在課後測試 Read committed(讀以送出)出現的問題,很有意思的一個現象: Read committed(讀以送出)會出現隔離機制失效,也可能出現髒讀,不可重複讀幻讀的情況,而Repeatable read(可重複讀)不會更加穩定。

測試的步驟

第一步:

首先我是打開了兩個cmd視窗,進入mysql

并且用指令 SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED

修改了其中一個事務的隔離級别為Read committed

在使用 select @@transaction_isolation (MySQL 8.0)檢視了隔離級别

關于MySQL 事務隔離級别 Read committed(讀以送出)會出現隔離機制失效

第二部:進入到 test01 資料庫中,此時test01.Cat 表是空表,屬性 id 和 name

關于MySQL 事務隔離級别 Read committed(讀以送出)會出現隔離機制失效

第三步:兩邊都進入事務 start transaction 左邊對Cat進行修改 檢視 右邊是否能看見

關于MySQL 事務隔離級别 Read committed(讀以送出)會出現隔離機制失效

在測試2條資料 結果一樣右邊無法檢視

關于MySQL 事務隔離級别 Read committed(讀以送出)會出現隔離機制失效

直到左邊送出了 , 右邊才能檢視左邊送出的資料

關于MySQL 事務隔離級别 Read committed(讀以送出)會出現隔離機制失效

這是正常情況下,然後我又做了一個 測試, 此時資料庫 沒有Dog表,兩邊再次進入事務中,兩邊事務隔離級别不變

關于MySQL 事務隔離級别 Read committed(讀以送出)會出現隔離機制失效

檢視原來的Cat表資訊,并添加屬性

關于MySQL 事務隔離級别 Read committed(讀以送出)會出現隔離機制失效

此時沒有test01.Dog表,左邊事務 create table Dog ( id int ,

name

varchar(32));

關于MySQL 事務隔離級别 Read committed(讀以送出)會出現隔離機制失效

之後問題就來了!!!!:

建立了Dog表後read committed 隔離機制失效了,也可以出現髒讀現象,隔離機制失效

關于MySQL 事務隔離級别 Read committed(讀以送出)會出現隔離機制失效
關于MySQL 事務隔離級别 Read committed(讀以送出)會出現隔離機制失效

随後測試 repeatable read (可重複讀)

修改右邊事務隔離機制,删除Dog表格,再次進入事務

關于MySQL 事務隔離級别 Read committed(讀以送出)會出現隔離機制失效

測試在左邊Cat中添加,右邊檢視

關于MySQL 事務隔離級别 Read committed(讀以送出)會出現隔離機制失效

左邊建立Dog表格

關于MySQL 事務隔離級别 Read committed(讀以送出)會出現隔離機制失效

直到兩邊都送出了才能檢視

關于MySQL 事務隔離級别 Read committed(讀以送出)會出現隔離機制失效

總結:測試的事務read committed會出先髒讀、不可重複讀、幻讀的情況,也會出現事務隔離機制失效的問題。

繼續閱讀