MySQL事務的幻讀
阿新 • • 發佈:2019-02-12
幻讀——PHANTON READ
又稱為虛度,是指在一個事務內,兩次查詢中資料條數不一致
幻讀和不可重複讀類似,都是在兩次查詢過程中,區別,幻讀是由於其他事務做了插入記錄的操作,導致,記錄條數有所增加
設定b賬戶的隔離級別
B賬戶,由於,前面將事務的隔離級別設定為REPEATABLE READ——可重複讀,這種隔離級別可以避免幻讀的出現
因此,需要將事務的隔離級別設定的更低,設定為READ COMMITTED
演示幻讀
B賬戶,首先,在b賬戶中開啟一個事務,在事務中查詢賬戶的餘額
A賬戶,在對a賬戶操作之前,查詢當前賬戶中的資訊
對a賬戶執行新增操作,a賬戶不用開啟事務,直接執行新增操作
B賬戶,當a賬戶新增成功後,在b賬戶中,再次查詢賬戶的餘額
可以看出,第二次查詢比第一次查詢,多了一條記錄
這種情況不是錯誤的,但是,不符合實際需求,演示完成,將b賬戶中的事務提交
重新設定b賬戶的隔離級別
B賬戶,為了防止出現幻讀,將b賬戶的隔離級別設定為REPEATABLE READ
驗證是否出現幻讀
B賬戶,重新開啟一個事務,查詢當前賬戶的餘額
A賬戶,進行新增操縱之前,先檢視賬戶中的資訊
對a賬戶執行新增操作,不開啟事務,直接執行新增操作
B賬戶,當a賬戶執行完新增操作,再次,查詢當前賬戶中的資訊
可以看出,兩次查詢結果一致,在同一個事務中,兩次的查詢結果是一致的
因此,事務的隔離級別為REPEATABLE READ,可以避免幻讀
最後,使用commit提交當前事務,提交之後,查詢賬戶的餘額
可以看出,賬戶的資訊已經修改,添加了一條新紀錄