mysql隔离级别验证_MySQL事务隔离级别以及验证
查詢初始數(shù)據(jù)
開啟A事務(wù) 并做更新操作
再另一端 B開始另一個(gè)事務(wù)查詢 事務(wù)級(jí)別設(shè)置為讀未提
查詢到事務(wù)未提交的數(shù)據(jù)? a的count修改為3 但是沒有提交
2 第二個(gè)級(jí)別 讀已提交 避免臟讀問題 但是有不可重復(fù)讀問題
回滾數(shù)據(jù) 修改隔離級(jí)別 確保都是 讀已提交級(jí)別
客戶端A
客戶端B
驗(yàn)證 臟讀問題
客戶端A
客戶端B? 查詢出結(jié)果 沒有臟讀問題
A提交事務(wù) B再查詢
測(cè)試不可重復(fù)讀問題
A客戶端 開始事務(wù) 先進(jìn)行一次查詢 仍然設(shè)置為讀已提交的隔離級(jí)別
此時(shí) A客戶端 沒有提交事務(wù) 開啟B客戶端 做更新操作
此時(shí)A客戶端再次查詢 結(jié)果不一樣? 在一個(gè)事務(wù)中 兩次查詢不一樣
3 第三個(gè)級(jí)別 可重復(fù)讀? 避免 不可重復(fù)讀問題;
確保客戶端A 和 客戶端B都是 可重復(fù)讀的隔離級(jí)別
客戶端A 第一次查詢
客戶端B 開啟事務(wù) 并更新 然后 提交事務(wù)
這時(shí) 客戶端A 再次查詢數(shù)據(jù) 仍然是15 所以 避免了不可重復(fù)讀的問題
測(cè)試幻讀問題
同樣保持之前的數(shù)據(jù) 客戶端B開始事務(wù) 插入數(shù)據(jù)
客戶端B
此時(shí) 客戶端A再次查詢 還是一樣
經(jīng)過查詢? 據(jù)說來源于 MySQL技術(shù)內(nèi)幕 :InnoDB存儲(chǔ)引擎
之前提到一般情況下MySQL的InnoDB引擎在可重復(fù)讀的情況下是沒法保證不出現(xiàn)幻讀的,但實(shí)際情況是MySQL可以通過加鎖來防止幻讀的出現(xiàn),這種鎖定通過Next-key機(jī)制來實(shí)現(xiàn),是屬于記錄鎖和間隙鎖(Gap鎖)的結(jié)合。
《MySQL技術(shù)內(nèi)幕:InnoDB存儲(chǔ)引擎》-第六章:鎖
總結(jié)
以上是生活随笔為你收集整理的mysql隔离级别验证_MySQL事务隔离级别以及验证的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 同花顺电脑版怎么登录(同花顺电脑版怎么登
- 下一篇: php baocuo error,PHP