<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                > # 事務特征和隔離級別 - 隔離級別:Read Uncommitted、Read Committed、Repeatable Read、Serializable - 讀未提交(Read uncommitted) :一個事務可以讀取另一個未提交事務的數據(沒有視圖概念, 返回最新結果) - 讀提交(Read committed) :一個事務要等另一個事務提交后才能讀取數據。(這個視圖是每個SQL語句開始執行的時候創建的) - 可重復讀(Repeatable read):在開始讀取數據(事務開啟)時,不再允許修改操作 (這個視圖是在事務啟動時創建的, 整個事務期間都用這個視圖) - 串行化(serializable) :Serializable 是最高的事務隔離級別,在該級別下,事務串行化順序執行,可以避免臟讀、不可重復讀與幻讀。但是這種事務隔離級別效率低下,比較耗數據庫性能。(沒有視圖, 通過加鎖方式來避免并行訪問, 讀和寫都加鎖了) - 并發下事務會產生的問題 - 臟讀 : 事務A讀到了事務B還沒有提交的數據(讀未提交 會出現) - 不可重復度讀: 在一個事務里面讀取了兩次某個數據,讀出來的數據不一致(對數據進行修改)(讀未提交、讀提交 會出現) - 幻讀: 事務在相同范圍內查詢多次, 返回的結果集不一樣(對范圍的數據進行新增或刪除)(讀未提交、讀提交、可重復讀 會出現) - MySQL 默認隔離級別是可重復讀(Repeatable read), 該級別存在幻讀問題 - 幻讀指的是一個事務在前后兩次查詢同一個范圍的時候,后一次查詢看到了前一次查詢沒有看到的行, 幻讀僅專指"新插入的行"。怎么解決呢?有兩種方式, 分別如下: - 當前讀:通過next-key鎖實現(Record Lock行記錄鎖+Gap間隙鎖), 如下圖數據會分成 (-∞,3],(3,5],(5,8],(8,14],(14,20],(20,+∞)區間, 事務的快照時間是從第一個select開始,對涉及的區間加鎖。 ![在這里插入圖片描述](https://images.gitbook.cn/6b07da00-be71-11ea-bfba-6fcc0154bbf2) ``` select ... lock in share mode (讀鎖) select ... for update (寫鎖) update ... (更新操作) delete ... (刪除操作) insert ... (插入操作) ``` - 上鎖的時候, 不僅僅是對想要的數據加鎖, 數據與數據之間的縫隙也會上鎖 ![![](images/up-33f6e8ebe3f06a77961cd648334f283b319.png)](images/screenshot_1722490585311.png) - 快照讀: 通過 UndoLog多版本并發控制實現(MVCC) ``` select ... (普通查詢) ``` -- 1. **READ UNCOMMITTED(讀未提交)**:這是最低的隔離級別。在該級別下,一個事務可以看到其他未提交事務的修改。這可能導致臟讀、不可重復讀和幻影讀的問題。 2. **READ COMMITTED(讀已提交)**:在該級別下,事務只能看到已經提交的其他事務所做的修改。這可以防止臟讀,但仍然可能發生不可重復讀和幻影讀。 3. **REPEATABLE READ(可重復讀)**:在該級別下,事務在整個事務期間看到的數據保持一致,不會受到其他事務的影響。這可以防止臟讀和不可重復讀,但仍然可能發生幻影讀。 4. **SERIALIZABLE(串行化)**:這是最高的隔離級別。在該級別下,所有事務都像是按順序執行的,不會發生并發問題。它可以防止臟讀、不可重復讀和幻影讀,但可能導致性能下降,因為它會鎖定大量數據。 > 相關閱讀 - [MySQL 分布式事務的“路”與“坑”](https://my.oschina.net/u/4273516/blog/5459037)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看