
MSQL 默認隔離級別是 可重復讀; 可重復讀即 同一次 查詢,再次查詢結果一致;不會查詢到別的事務提交的內容;
原理: 開始事務后,做一次select產生一個readview[此后復用該readview, 不可重復讀則是每次select都是新的readview],這個readview已經確定了能讀取的 undolog鏈;簡單理解就是只能讀取到當前事務版本之前的數據;當另一個事務插入數據后,事務版本已經領先了; 所以當當前事務再次 select的時候只能查詢到之前readview的內容;
可重復讀 不能解決幻讀問題, 什么是幻讀。 比如 現在 查詢 數據 為 [1,2,3] ; 準備插入一條4記錄(另一個事務插入了4記錄);發現4記錄插不進去; 這便是幻讀,明明沒有 為什么插入不進去。
那么如何解決這個問題? mysql提供 間隙鎖; 即查詢時 通過 for update操作,阻止其他事務寫入數據
浙公網安備 33010602011771號