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

MySQL 事務操作極簡入門:START TRANSACTION、COMMIT、ROLLBACK 三條指令掌握 ACID

     編輯:MySQL 資料庫相關知識

MySQL 事務核心只有三條指令,掌握即可實現「全做或全不做」的原子性操作。

三大指令

指令作用關鍵點
START TRANSACTION;開啟事務,標記起始點之後的 DML 納入事務
COMMIT;確認提交,永久生效不可回滾,隱含結束事務
ROLLBACK;回滾到 START TRANSACTION 狀態撤銷所有未提交變更

實戰演示


mysql> SELECT * FROM useraccount;
+-----------+--------+-------------+
| AccountID | userID | AccountName |
+-----------+--------+-------------+
| 1         | 2      | zhifubao    |
+-----------+--------+-------------+

mysql> START TRANSACTION;
Query OK, 0 rows affected (0.00 sec)

mysql> UPDATE useraccount SET userID = 1;
Query OK, 1 row affected (0.00 sec)

mysql> SELECT * FROM useraccount;
+-----------+--------+-------------+
| AccountID | userID | AccountName |
+-----------+--------+-------------+
| 1         | 1      | zhifubao    |  -- 已修改,但未提交
+-----------+--------+-------------+

mysql> ROLLBACK;
Query OK, 0 rows affected (0.28 sec)

mysql> SELECT * FROM useraccount;
+-----------+--------+-------------+
| AccountID | userID | AccountName |
+-----------+--------+-------------+
| 1         | 2      | zhifubao    |  -- 回滾成功,恢復原值
+-----------+--------+-------------+

進階用法

  • 儲存點:SAVEPOINT sp1; / ROLLBACK TO SAVEPOINT sp1; / RELEASE SAVEPOINT sp1; 實現部分回滾。
  • 自動提交控制:SET autocommit=0; 關閉自動提交,所有 DML 需顯式 COMMIT;SET autocommit=1; 開啟 (預設)。
  • 一致性讀:InnoDB REPEATABLE READ 隔離級別下,事務開啟瞬間建立快照,普通 SELECT 讀快照,SELECT ... FOR UPDATE 讀最新並加鎖。

避坑提醒

  • DDL (CREATE/DROP/ALTER) 會隱含提交,不可在事務中混用。
  • 長事務持有鎖導致阻塞、Undo Log 膨脹、主從延遲,業務邏輯務必精簡。
  • 死鎖發生時 InnoDB 自動回滾其中一個事務,應用需捕獲 ERROR 1213 重試。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved