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

MySQL 交易完整指南:ACID 特性與實戰操作

     編輯:MySQL 綜合教學

MySQL 交易核心概念與實戰應用

交易是資料庫區別於檔案系統的關鍵特性,將多個操作綁定為不可分割的邏輯單元。本文系統梳理 ACID 四大特性、隱性提交模式與實戰控制語法。

交易的 ACID 四大特性

特性英文核心含義
原子性Atomicity交易內所有操作要麼全成功,要麼全失敗回滾
一致性Consistency交易前後資料庫從一個一致狀態轉移到另一個一致狀態
隔離性Isolation並發交易互不干擾,四大隔離級別控制可見度
持久性Durability交易提交後,修改永久保存,不會因系統崩潰丟失

MySQL 預設自動提交模式

MySQL 預設 autocommit = ON,每條 SQL 隱性包裹為單獨交易自動提交。需顯式開啟交易塊:

-- 關閉自動提交
SET autocommit = 0;

-- 或顯式開啟交易
START TRANSACTION;  -- 標準語法
BEGIN;              -- MySQL 別名

-- 業務操作
INSERT INTO orders ...;
UPDATE inventory SET stock = stock - 1 WHERE id = 100;

-- 提交或回滾
COMMIT;     -- 永久生效
ROLLBACK;   -- 完全撤銷

四大隔離級別與並發異常

隔離級別髒讀不可重複讀幻讀鎖開銷
READ UNCOMMITTED可能可能可能最低
READ COMMITTED不可能可能可能低
REPEATABLE READ不可能不可能可能中
SERIALIZABLE不可能不可能不可能最高

MySQL InnoDB 預設 REPEATABLE READ,透過 MVCC(多版本併發控制)實現無鎖一致性讀,大幅提升並發效能。

設定隔離級別

-- 當前會話
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;

-- 全域預設
SET GLOBAL TRANSACTION ISOLATION LEVEL REPEATABLE READ;

儲存點:交易內的部分回滾

START TRANSACTION;
INSERT INTO account_log ...;
SAVEPOINT before_transfer;
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
-- 發現錯誤,回滾至儲存點
ROLLBACK TO SAVEPOINT before_transfer;
COMMIT;

最佳實踐建議

  1. 交易範圍最小化:僅包含必要操作,縮短鎖持有時間
  2. 避免交易中進行網路呼叫、檔案 I/O 等慢速操作
  3. 使用索引覆蓋查詢減少鎖掃描範圍
  4. 死鎖發生時,InnoDB 自動偵測並回滾代價較小的交易,應用層需實作重試邏輯
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved