日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

MySQL(25):事务的隔离级别出现问题之 不可重复读

發布時間:2024/8/26 综合教程 32 生活家
生活随笔 收集整理的這篇文章主要介紹了 MySQL(25):事务的隔离级别出现问题之 不可重复读 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. 不可重復讀

所謂的不可重復讀(Non-Repeatable Read)是指事務中兩次查詢的結果不一致,原因是在查詢的過程中其他事務做了更新的操作。

例如,銀行在做統計報表的時候,第一次查詢a賬戶有1000元,第二次查詢a賬戶有900元,原因是統計期間a賬戶取出了100元,這樣導致多次統計報表的結果不一致。

不可重復讀和臟讀有點類似,但是臟讀是讀取了另一個事務未提交的臟數據,不可重復讀是在事務內重復讀取了別的線程已提交的數據。

2. 演示不可重復讀

(1)b賬戶:首先在b賬戶中開啟一個事務,然后在當前事務中查詢各個賬戶的余額信息,查詢結果如下:

(2)a賬戶:在a賬戶中不用開啟事務,直接使用update語句執行更新操作即可,具體語句如下:

update account set money=money-100 where name='a';

由于a賬戶只需要執行修改的操作,不需要保證同步性,因此直接執行SQL語句就可以,執行結果如下所示:

接下來使用select語句查詢a賬戶的余額,如下:

(3)再次回到b賬戶,如下:

b賬戶:當a賬戶中的更新操作執行完畢之后,在b賬戶之中再次查詢各賬戶的余額,發現a賬戶變成900元。

兩次b賬戶查詢的結果不一致,實際上這種操作是沒有錯的

3. 如何解決這個問題?

設置b賬戶的事務的隔離級別

b賬戶:為了防止重復讀的情況發生,可以將該事務的隔離級別設置為Repeatable Read(可重復讀),具體如下:

set session transaction isolation level repeatable read;

總結

以上是生活随笔為你收集整理的MySQL(25):事务的隔离级别出现问题之 不可重复读的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。