事務是資料庫一致性的基石。本文系統梳理 ACID 四大特性、引擎支援差異、隱式提交陷阱、Savepoint 機制,提供從基礎到進階的完整實戰範例。
| 特性 | 英文 | 核心含義 |
|---|---|---|
| 原子性 | Atomicity | 全做或全不做,不可分割 |
| 一致性 | Consistency | 事務前後資料庫滿足所有約束 |
| 隔離性 | Isolation | 並發事務互不干擾 |
| 持久性 | Durability | Commit 後永久生效,不怕崩潰 |
SHOW ENGINES;
ALTER TABLE person ENGINE=InnoDB;BEGIN | START TRANSACTION -- 開啟 COMMIT -- 提交 ROLLBACK -- 回滾 SAVEPOINT name -- 設定保存點 ROLLBACK TO SAVEPOINT name -- 回滾至保存點 RELEASE SAVEPOINT name -- 釋放保存點
隱式提交陷阱: DDL(CREATE/ALTER/DROP)、DCL(GRANT/REVOKE)、TRUNCATE 會強制提交當前事務,不可回滾。
BEGIN; UPDATE score SET score=40 WHERE scoreid=1; SAVEPOINT s1; -- 保存點 1 UPDATE score SET score=50 WHERE scoreid=2; SELECT * FROM score; -- 兩筆皆已修改 ROLLBACK TO SAVEPOINT s1; -- 僅回滾 scoreid=2 的修改 SELECT * FROM score; -- scoreid=1 保持 40,scoreid=2 恢復原值 COMMIT; -- 提交 scoreid=1 的修改
ROLLBACK TO SAVEPOINT,不能 COMMIT TO SAVEPOINT;COMMIT 或 ROLLBACK 結束事務,未提交的保存點修改不會持久化;InnoDB 預設 REPEATABLE READ,透過 MVCC + Next-Key Lock 實現。可透過 SET SESSION TRANSACTION ISOLATION LEVEL ... 調整,但需評估幻讀/死鎖風險。