动态

详情 返回 返回

【趙渝強老師】MySQL的事務隔離級別 - 动态 详情

數據庫允許多個客户端同時訪問。當這些客户端併發訪問數據庫中同一部分的數據時,如果沒有采取必要的隔離措施就容易造成併發一致性問題,從而破壞數據的完整性。考慮下圖的場景:
image.png

在時間點1上,var的數值是100。客户端A在時間點2的時候更新了它的值為200,但沒有提交事務。在時間點3的時候,客户端B讀取到了客户端A還未提交的數值200。但在時間點4,客户端A執行了回滾操作。那麼,對於客户端B來説,如果在時間點5再次讀取數據,得到就應該是100。那麼客户端B就有了數據不一致的問題。而造成問題的根本原因在,客户端B讀取到了客户端A還沒有提交的事務中的數據。

視頻講解如下:
https://www.bilibili.com/video/BV1BB4LzoEA9/?aid=115347655171...

為了解決數據在併發訪問時,數據的一致性問題。MySQL數據庫提供了四種事務的隔離級別,它們分別是:讀未提交(READ-UNCOMMITTED)讀已提交(READ-COMMITTED)可重複讀(REPEATABLE-READ)可序列化讀(SERIALIZABLE)。執行下面的語句可以得到MySQL默認的事務隔離級別是可重複讀。

mysql> show variables like '%isolation%';

# 輸出的信息如下:
+-----------------------+-----------------+
| Variable_name         | Value           |
+-----------------------+-----------------+
| transaction_isolation | REPEATABLE-READ |
+-----------------------+-----------------+

下面的語句將修改MySQL數據庫的事務隔離級別為:READ UNCOMMITTED。

mysql> set session transaction isolation level read uncommitted;

MySQL數據庫在不同的事務隔離級別下會有不同的行為,從而在併發訪問數據的時候會帶來不同的問題。下表列舉了在不同的事務隔離級別下,MySQL可能存在的不同問題。
image.png

user avatar zyx178 头像 shenchendexiaoyanyao 头像 mengxiang_592395ab95632 头像 dbkangaroo 头像
点赞 4 用户, 点赞了这篇动态!
点赞

Add a new 评论

Some HTML is okay.