上完了MySQL課程 的事務隔離機制後,在課後測試 Read committed(讀以送出)出現的問題,很有意思的一個現象: Read committed(讀以送出)會出現隔離機制失效,也可能出現髒讀,不可重複讀幻讀的情況,而Repeatable read(可重複讀)不會更加穩定。
測試的步驟
第一步:
首先我是打開了兩個cmd視窗,進入mysql
并且用指令 SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED
修改了其中一個事務的隔離級别為Read committed
在使用 select @@transaction_isolation (MySQL 8.0)檢視了隔離級别
第二部:進入到 test01 資料庫中,此時test01.Cat 表是空表,屬性 id 和 name
第三步:兩邊都進入事務 start transaction 左邊對Cat進行修改 檢視 右邊是否能看見
在測試2條資料 結果一樣右邊無法檢視
直到左邊送出了 , 右邊才能檢視左邊送出的資料
這是正常情況下,然後我又做了一個 測試, 此時資料庫 沒有Dog表,兩邊再次進入事務中,兩邊事務隔離級别不變
檢視原來的Cat表資訊,并添加屬性
此時沒有test01.Dog表,左邊事務 create table Dog ( id int ,
name
varchar(32));
之後問題就來了!!!!:
建立了Dog表後read committed 隔離機制失效了,也可以出現髒讀現象,隔離機制失效
随後測試 repeatable read (可重複讀)
修改右邊事務隔離機制,删除Dog表格,再次進入事務
測試在左邊Cat中添加,右邊檢視
左邊建立Dog表格
直到兩邊都送出了才能檢視
總結:測試的事務read committed會出先髒讀、不可重複讀、幻讀的情況,也會出現事務隔離機制失效的問題。