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

MySQL 事務 ACID 特性詳解:COMMIT/ROLLBACK 與自動提交控制

     編輯:MySQL 綜合教學

事務定義

一組操作要么全成功,要么全失敗,視為單一工作單元。

ACID 四大特性

特性英文含義
原子性Atomicity全部執行或全部回滾,無中間態
一致性Consistency事務前後數據庫從一個一致狀態轉到另一個
隔離性Isolation並發事務互不干擾,四級隔離級別控制可見度
持久性Durability提交後修改永久保存,掉電不丟失

核心控制語句

-- 開啟事務
START TRANSACTION;  -- 或 BEGIN WORK

-- 業務 SQL
INSERT ...; UPDATE ...; DELETE ...;

-- 成功提交
COMMIT;

-- 失敗回滾
ROLLBACK;

自動提交模式

  • 默認 autocommit=ON:每條 SQL 隱式事務自動提交
  • 關閉:SET autocommit = 0; 後續語句歸屬同一事務,需顯式 COMMIT
  • 查看:SHOW VARIABLES LIKE 'autocommit';

InnoDB 事務支持

僅支持事務的表類型(MyISAM 不支持)。建表指定:

CREATE TABLE tcount_tbl (
    tutorial_author VARCHAR(40) NOT NULL,
    tutorial_count INT
) ENGINE=InnoDB;

PHP 事務模式

<?php
$mysqli = new mysqli('localhost', 'root', 'rootpassword', 'TUTORIALS', 3306);
if ($mysqli->connect_errno) { die('連接失敗: ' . $mysqli->connect_error); }

try {
    $mysqli->begin_transaction(); // 關閉自動提交並開始事務
    
    $mysqli->query("INSERT INTO accounts (user, amount) VALUES ('A', -100)");
    $mysqli->query("INSERT INTO accounts (user, amount) VALUES ('B', 100)");
    // 模擬業務邏輯檢查
    if (false) { throw new Exception('業務校驗失敗'); }
    
    $mysqli->commit();
    echo "轉賬成功";
} catch (Exception $e) {
    $mysqli->rollback();
    echo "轉賬失敗,已回滾: " . $e->getMessage();
}
$mysqli->close();
?>

隔離級別(MySQL 默認 REPEATABLE READ)

級別髒讀不可重複讀幻讀鎖開銷
READ UNCOMMITTED✓✓✓最低
READ COMMITTED✗✓✓低
REPEATABLE READ✗✗✓ (InnoDB 間隙鎖解決)中
SERIALIZABLE✗✗✗最高

設置:SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;

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