首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 事務 ACID 特性與四大隔離級別深度解析:髒讀、不可重複讀、幻讀、傳播行為

     編輯:MySQL 綜合教學

MySQL 事務 ACID 特性與四大隔離級別深度解析:髒讀、不可重複讀、幻讀、傳播行為

事務是數據庫操作的邏輯單元,具備原子性、一致性、隔離性、持久性(ACID)。本文系統講解四大特性、三大讀異常、四種隔離級別對比表、事務組成語句、提交方式、以及 Spring 風格的七種事務傳播行為,構建完整事務知識體系。

一、ACID 四大特性

  • 原子性:事務不可分割,要麼全做要麼全不做。
  • 一致性:事務前後數據庫從一個一致性狀態轉移到另一個,由原子性保證。
  • 隔離性:並發事務互不干擾,看不到中間狀態。
  • 持久性:提交後改變永久寫入物理存儲。

二、三大讀異常

異常現象本質
髒讀讀到未提交數據事務 A 修改未提交,事務 B 讀取並依賴
不可重複讀同一事務兩次讀同記錄,數據不同事務 A 讀取間隙,事務 B 修改並提交
幻讀同一查詢條件重新讀取,發現新增滿足條件記錄事務 A 讀取間隙,事務 B 插入新記錄並提交

三、四大隔離級別對比

級別髒讀不可重複讀幻讀鎖/並發特點
Read Uncommitted✗ 可能✗ 可能✗ 可能SELECT 無鎖,並發最高,數據最不安全
Read Committed✓ 解決✗ 可能✗ 可能只讀已提交,Oracle 默認
Repeatable Read✓ 解決✓ 解決✗ 可能(InnoDB 靠 Next-Key Lock 緩解)InnoDB 默認,事務內查詢一致性快照
Serializable✓ 解決✓ 解決✓ 解決全表共享鎖,讀寫互斥,並發最低

隔離級別對比表

四、事務組成與提交

  • 一組 DML(INSERT/UPDATE/DELETE)+ 至多一條 DDL/DCL(DDL/DCL 導致隱式提交)。
  • 顯式提交:COMMIT。
  • 自動提交:執行 DDL/DCL、程序正常退出、autocommit=ON 時每條語句提交。

五、事務傳播行為(七種)

傳播類型行為描述回滾影響範圍
REQUIRED有事務則加入,無則新建任意處異常全量回滾
SUPPORTS有事務則加入,無則非事務運行無事務時不回滾
MANDATORY必須在事務中運行,否則拋異常父事務回滾則連帶回滾
REQUIRES_NEW掛起當前事務,新建獨立事務內層提交後外層回滾不影響內層
NOT_SUPPORTED掛起當前事務,非事務運行不參與事務回滾
NEVER不能在事務中運行,否則拋異常不適用
NESTED嵌套事務,基於 Savepoint父回滾則子回滾,子回滾可不影響父

理解傳播行為關鍵在於「事務邊界」與「回滾範圍」,REQUIRED 最常用,REQUIRES_NEW 適合獨立日志記錄,NESTED 利用 Savepoint 實現部分回滾。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved