首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 事務控制全攻略:ACID、Savepoint 與遷移 Oracle 的坑

     編輯:MySQL 資料庫相關知識

事務控制語句速查

語句說明
START TRANSACTION / BEGIN [WORK]開啟新事務
COMMIT [WORK] [AND [NO] CHAIN] [[NO] RELEASE]提交事務;CHAIN 立即開啟同隔離級別新事務,RELEASE 斷開連線
ROLLBACK [WORK] [AND [NO] CHAIN] [[NO] RELEASE]回滾事務
SET AUTOCOMMIT = {0|1}0=手動提交,1=自動提交(預設)

與 Oracle 關鍵差異

  • MySQL 預設 AUTOCOMMIT=1,Oracle 預設手動提交。
  • 遷移時必須確認應用是否顯式管理事務,否則會產生資料不一致。

Savepoint 部分回滾

START TRANSACTION;
INSERT INTO t VALUES (1);
SAVEPOINT sp1;
INSERT INTO t VALUES (2);
SAVEPOINT sp2;
INSERT INTO t VALUES (3);
ROLLBACK TO SAVEPOINT sp1;  -- 僅保留第一筆
COMMIT;
  • 同名 Savepoint 後者覆蓋前者。
  • RELEASE SAVEPOINT 可刪除不再需要的存檔點。
  • 無法部分提交,只能部分回滾。

混合引擎事務陷阱

  • 同一事務中操作事務型(InnoDB)與非事務型(MyISAM)表,ROLLBACK 僅影響事務型表,非事務型表變更已生效,導致不一致。
  • 包含非事務表的事務,回滾操作也會寫入 Binlog,確保主從複製一致性。

DDL 隱式提交

所有 DDL(CREATE、ALTER、DROP 等)不可回滾,且部分 DDL 會觸發隱式提交,結束當前事務。

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