說到銀行轉帳,大家或許都有過這樣的疑慮:如果扣款成功但鈔票沒吐出來,資料庫怎麼辦?這正是事務機制要解決的核心問題。事務將一組 SQL 操作視為不可分割的單元,要麼全做,要麼全不做,確保資料一致性。
事務由一條或多條 SQL 語句組成,遵循「全有或全無」原則。以 ATM 取款為例:驗證密碼、扣除餘額、吐鈔、取走現金,這 7 個步驟必須全部成功,否則整個操作回滾,資料庫恢復原狀。
BEGIN | START TRANSACTION -- 顯式開啟事務 COMMIT | COMMIT WORK -- 提交事務,修改永久生效 ROLLBACK | ROLLBACK WORK -- 回滾事務,撤銷未提交修改 SAVEPOINT identifier -- 設定保存點 RELEASE SAVEPOINT identifier -- 刪除保存點 ROLLBACK TO identifier -- 回滾到指定保存點 SET TRANSACTION ISOLATION LEVEL ... -- 設定隔離級別
預設下 MySQL 自動提交(autocommit=1),需顯式開啟事務或設定 SET AUTOCOMMIT=0 關閉自動提交。
以下語句執行後會隱式提交,無需手動 COMMIT:
ALTER TABLE、CREATE TABLE、DROP TABLE 等GRANT、REVOKE、CREATE USER 等ANALYZE TABLE、OPTIMIZE TABLE 等InnoDB 支援四種隔離級別,預設為 REPEATABLE READ:
可透過 SET [SESSION|GLOBAL] TRANSACTION ISOLATION LEVEL ... 調整。
事務是資料庫可靠性的基石。理解 ACID、掌握隔離級別、善用保存點與嵌套事務,能有效應對複雜業務場景。實戰中請結合 EXPLAIN 分析執行計畫,避免長事務阻塞資源。