欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MySQL事務(wù)機制和隔離級別使用方式

 更新時間:2025年09月23日 08:48:34   作者:我需要打球  
MySQL事務(wù)通過ACID特性保障數(shù)據(jù)一致性,隔離級別(讀未提交、讀已提交、可重復(fù)讀、串行化)平衡并發(fā)性能與數(shù)據(jù)安全,InnoDB默認使用可重復(fù)讀,依賴MVCC避免臟讀和不可重復(fù)讀,間隙鎖減少幻讀,需根據(jù)場景權(quán)衡一致性與性能

MySQL 的事務(wù)機制是保證數(shù)據(jù)庫操作一致性和可靠性的核心特性,而隔離級別則用于平衡事務(wù)并發(fā)時的性能數(shù)據(jù)一致性

以下是詳細解析:

一、事務(wù)的四大特性(ACID)

事務(wù)(Transaction)是一組不可分割的 SQL 操作,要么全部成功,要么全部失敗,核心依賴四大特性:

原子性(Atomicity)

  • 事務(wù)中的操作要么全部執(zhí)行,要么全部回滾(如轉(zhuǎn)賬時,扣款和收款必須同時成功或失?。?/li>
  • 實現(xiàn)依賴:Undo Log(記錄操作前的狀態(tài),用于回滾)。

一致性(Consistency)

  • 事務(wù)執(zhí)行前后,數(shù)據(jù)從一個合法狀態(tài)轉(zhuǎn)換到另一個合法狀態(tài)(如轉(zhuǎn)賬后總金額不變)。
  • 由原子性、隔離性、持久性共同保證,部分依賴業(yè)務(wù)邏輯。

隔離性(Isolation)

  • 多個事務(wù)并發(fā)執(zhí)行時,彼此的操作互不干擾(如避免同時修改同一行數(shù)據(jù)導致的混亂)。
  • 實現(xiàn)依賴:鎖機制(行鎖、表鎖)和 MVCC(多版本并發(fā)控制)。

持久性(Durability)

  • 事務(wù)提交后,修改永久保存(即使數(shù)據(jù)庫崩潰也不丟失)。
  • 實現(xiàn)依賴:Redo Log(記錄操作后的狀態(tài),用于崩潰恢復(fù))。

二、事務(wù)的隔離級別(SQL 標準定義)

MySQL 的隔離級別從低到高分為 4 種,級別越高,并發(fā)控制越嚴格,但性能開銷越大

隔離級別臟讀(Dirty Read)不可重復(fù)讀(Non-repeatable Read)幻讀(Phantom Read)說明
讀未提交(Read Uncommitted)可能發(fā)生可能發(fā)生可能發(fā)生一個事務(wù)可讀取另一個未提交的修改,極少使用(如實時數(shù)據(jù)監(jiān)控場景)。
讀已提交(Read Committed)不會發(fā)生可能發(fā)生可能發(fā)生一個事務(wù)只能讀取另一個已提交的修改(Oracle 默認級別)。
可重復(fù)讀(Repeatable Read)不會發(fā)生不會發(fā)生幾乎不發(fā)生事務(wù)中多次讀取同一數(shù)據(jù)結(jié)果一致(MySQL InnoDB 默認級別)。
串行化(Serializable)不會發(fā)生不會發(fā)生不會發(fā)生事務(wù)串行執(zhí)行,完全避免并發(fā)問題,但性能極低(僅用于嚴格數(shù)據(jù)一致性場景)。

三、各隔離級別的典型場景與實現(xiàn)

1. 讀未提交(Read Uncommitted)

  • 場景:幾乎不使用,僅適用于允許臨時臟數(shù)據(jù)的極端場景(如實時統(tǒng)計)。
  • 問題:事務(wù) A 修改數(shù)據(jù)未提交,事務(wù) B 讀取到該 “臟數(shù)據(jù)”,若 A 回滾,B 讀取的是無效數(shù)據(jù)。

2. 讀已提交(Read Committed)

  • 場景:大多數(shù)互聯(lián)網(wǎng)應(yīng)用(如電商訂單查詢,允許讀取最新已提交數(shù)據(jù))。
  • 解決臟讀:通過行鎖保證,事務(wù) A 修改數(shù)據(jù)時加鎖,事務(wù) B 只能讀取 A 提交后的數(shù)據(jù)。
  • 問題:不可重復(fù)讀 —— 事務(wù) B 兩次讀取同一行,期間事務(wù) A 修改并提交,導致 B 兩次結(jié)果不同。

3. 可重復(fù)讀(Repeatable Read,MySQL 默認)

  • 場景:金融、支付等需保證多次讀取一致性的場景(如對賬時多次查詢同一訂單金額)。
  • 解決不可重復(fù)讀:通過 MVCC 實現(xiàn),事務(wù)啟動時生成數(shù)據(jù)快照,后續(xù)讀取基于快照,不受其他事務(wù)提交影響。
  • 對幻讀的優(yōu)化:InnoDB 通過 “間隙鎖(Gap Lock)”+“臨鍵鎖(Next-Key Lock)”,幾乎避免幻讀(特殊場景仍可能發(fā)生,但實際使用中可忽略)。

4. 串行化(Serializable)

  • 場景:數(shù)據(jù)一致性要求極高的場景(如銀行核心交易)。
  • 實現(xiàn):強制事務(wù)按順序執(zhí)行(加表級鎖),完全禁止并發(fā),性能極低。

四、MySQL 中設(shè)置與查看隔離級別

1. 查看當前隔離級別

-- MySQL 8.0+
SELECT @@transaction_isolation;

-- MySQL 5.7及以下
SELECT @@tx_isolation;

2. 設(shè)置隔離級別(當前會話或全局)

-- 設(shè)置當前會話隔離級別
SET SESSION TRANSACTION ISOLATION LEVEL 隔離級別名稱;

-- 設(shè)置全局隔離級別(需重新連接生效)
SET GLOBAL TRANSACTION ISOLATION LEVEL 隔離級別名稱;

-- 示例:設(shè)置當前會話為讀已提交
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;

五、事務(wù)控制語句

  • 開啟事務(wù)START TRANSACTION; 或 BEGIN;
  • 提交事務(wù)COMMIT;(使修改永久生效)
  • 回滾事務(wù)ROLLBACK;(放棄所有修改,恢復(fù)到事務(wù)開始前狀態(tài))
  • 保存點SAVEPOINT 保存點名稱;(事務(wù)中設(shè)置中間點,可回滾到指定點)
START TRANSACTION;
UPDATE account SET balance = balance - 100 WHERE id = 1;
SAVEPOINT sp1;  -- 設(shè)置保存點
UPDATE account SET balance = balance + 100 WHERE id = 2;
ROLLBACK TO sp1;  -- 回滾到保存點(僅撤銷第二條更新)
COMMIT;

六、面試核心考點

  1. 默認隔離級別:MySQL InnoDB 默認是可重復(fù)讀(Repeatable Read),這是與其他數(shù)據(jù)庫(如 Oracle 默認讀已提交)的重要區(qū)別。
  2. MVCC 與隔離級別的關(guān)系:MVCC 是實現(xiàn)可重復(fù)讀和讀已提交的核心機制,通過數(shù)據(jù)多版本快照避免加鎖阻塞。
  3. 隔離級別與性能權(quán)衡:級別越高,一致性越好,但并發(fā)性能越差,實際應(yīng)用中通常選擇讀已提交可重復(fù)讀
  4. 幻讀的處理:InnoDB 在可重復(fù)讀級別通過間隙鎖減少幻讀,而串行化級別完全避免幻讀。

理解事務(wù)機制和隔離級別,是設(shè)計高并發(fā)、高可靠數(shù)據(jù)庫應(yīng)用的基礎(chǔ),尤其在金融、電商等對數(shù)據(jù)一致性要求嚴格的場景中至關(guān)重要。

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • MySQL大庫搭建主從的一種思路分享

    MySQL大庫搭建主從的一種思路分享

    這篇文章主要介紹了MySQL大庫搭建主從的一種思路分享,幫助大家更好的理解和學習使用MySQL數(shù)據(jù)庫,感興趣的朋友可以了解下
    2021-03-03
  • MySQL單表多關(guān)鍵字模糊查詢的實現(xiàn)方法

    MySQL單表多關(guān)鍵字模糊查詢的實現(xiàn)方法

    MySQL單表多關(guān)鍵字模糊查詢實現(xiàn)方法是很多人都非常想知道的一個問題,那么,究竟采用什么方法,才能實現(xiàn)MySQL單表多關(guān)鍵字模糊查詢呢?
    2011-03-03
  • CentOS7版本安裝Mysql8.0.20版本數(shù)據(jù)庫的詳細教程

    CentOS7版本安裝Mysql8.0.20版本數(shù)據(jù)庫的詳細教程

    這篇文章主要介紹了CentOS7版本安裝Mysql8.0.20版本數(shù)據(jù)庫的教程,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-05-05
  • 最新評論