博客 / 詳情

返回

對線面試官系列:MySQL 事務隔離級別

@

目錄
  • 前言
  • 背景
  • 基礎
  • 總結


前言

請各大網友尊重本人原創知識分享,謹記本人博客:南國以南i、微信公眾號:白碼夢想家

提示:以下是本篇文章正文內容,下面案例可供參考

背景

Hello 朋友們,接下來為大家開啓,面試題相關係列☞《對線面試官》 自信出擊,讓 offer 手到擒來!!!

基礎

MySQL 默認的事務隔離級別是REPEATABLE READ(可重複讀)。這一設置確保了在同一個事務中,多次讀取同一數據時,讀取的結果是一致的。即使在事務執行期間,其他事務對數據進行了修改(提交或未提交),也不會影響當前事務中已經讀取過的數據。這種隔離級別為多個併發事務提供了較高的數據一致性和隔離性,但也可能導致較高的併發性能開銷和鎖競爭。

MySQL 提供了四個不同的事務隔離級別,它們分別是:

  1. READ UNCOMMITTED(讀未提交):在此級別下,事務可以讀取到其他事務未提交的數據。這種級別的隔離性最低,可能導致髒讀問題,即讀取到了其他事務未提交的數據,而這些數據可能會因為事務的回滾而變成無效的。
  2. READ COMMITTED(讀已提交):事務只能讀取到其他事務已經提交的數據。這個級別解決了髒讀問題,但可能會導致不可重複讀問題,即在一個事務內,多次讀取同一數據時,由於其他事務的提交,讀取結果可能不一致。
  3. REPEATABLE READ(可重複讀):這是 MySQL 的默認隔離級別。在此級別下,事務在開始時會創建一個數據快照,之後的事務讀取都會基於這個快照進行,保證了在同一個事務中多次讀取同一數據時結果的一致性。然而,這個級別仍然可能面臨幻讀問題,即在一個事務內,多次執行同一查詢時,結果集中可能新增了符合條件的數據。
  4. SERIALIZABLE(可串行化):這是最高的隔離級別。在此級別下,事務被嚴格地順序執行,不允許併發執行。這種級別完全避免了髒讀、不可重複讀和幻讀問題,但會極大地影響系統的併發性能。
    需要注意的是,雖然 MySQL
    的默認事務隔離級別是可重複讀,但在實際應用中,根據具體的業務需求和性能要求,可以選擇合適的事務隔離級別。如果需要更高的併發性能和較低的鎖競爭,可以考慮降低事務隔離級別;而如果更注重數據的一致性和隔離性,可以選擇更高的事務隔離級別。

此外,MySQL 提供了設置事務隔離級別的語句,可以在事務開始前或事務內部使用,例如:

SET TRANSACTION ISOLATION LEVEL READ COMMITTED;

這條語句會將當前事務的隔離級別設置為讀已提交。同樣地,也可以將隔離級別設置為其他三個級別之一。


總結

我是南國以南i記錄點滴每天成長一點點,學習是永無止境的!轉載請附原文鏈接!!!

user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.