MySQL Transaction
MySQL 常用的兩個資料表類型:MyISAM、InnoDB,MyISAM 不支援交易功能
交易功能4個特性 (ACID)
- Atomicity (原子性、不可分割):交易內的 SQL 指令,不管在任何情況,都只能是全部執行完成,或全部不執行。若是發生無法全部執行完成的狀況,則會回滾(rollback)到完全沒執行時的狀態。
- Consistency (一致性):交易完成後,必須維持資料的完整性。所有資料必須符合預設的驗證規則、外鍵限制...等。
- Isolation (隔離性):多個交易可以獨立、同時執行,不會互相干擾。這一點跟後面會提到的「隔離層級」有關。
- Durability (持久性):交易完成後,異動結果須完整的保留。
開始進入交易模式
- SQL 指令:START TRANSACTION 或 BEGIN
結束交易模式
- 交易完成:使用 COMMIT 儲存所有變動,並結束交易。
- 交易過程異常:使用 ROLLBACK 回滾,取消交易,還原到未進行交易的狀態。(若交易過程連線中斷,沒 COMMIT 提交的變更,亦會如同執行 ROLLBACK 取消交易)
儲存點 (SAVEPOINT)
不能 ROLLBACK 的指令
會造成自動終止交易並 COMMIT 的指令
AUTOCOMMIT 自動提交設定
- AUTOCOMMIT 的設定值,預設一般都是 1
- 查詢目前 AUTOCOMMIT 的設定值:SELECT @@AUTOCOMMIT
- 將 AUTOCOMMIT 改為 0 時 ( SET AUTOCOMMIT=0 ),就算沒使用 START TRANSACTION 或 BEGIN ,整個連線執行的 SQL 指令,都會等到下達 COMMIT 提交後,才會真正儲存變更。也就是當 AUTOCOMMIT=0 時,跟在交易模式下相同。
沒有留言:
不接受新意見。