MySQL事务的幻读
幻讀——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提交當前事務,提交之后,查詢賬戶的余額
可以看出,賬戶的信息已經修改,添加了一條新紀錄
總結
以上是生活随笔為你收集整理的MySQL事务的幻读的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MySQL事务的读脏
- 下一篇: MySQL事务的可串行化