# L15 Transactions交易
###### tags: `SQL`
## 概述
**Transactions**可確保資料的多次異動**同時完整**的寫入資料庫
**Locks**避免同時多人修改時產生衝突

當Begin TRAN一路執行到Commit TRAN後,
紀錄會被儲存在**Log檔**中,等待**Checkpoint檢查點寫入**
If Checkpoint前完成交易,寫入資料庫
If Checkpoint後完成交易,等待下一個Checkpoint寫入
:anger: If到下一個Checkpoint但系統故障
等到系統復原(Recovery)時
未完成交易的會被**Roll Back還原**
已完成交易的會被**Roll Forward寫入**(Writing)

## Transactions使用原則
* 讓Checkpoint時間不要間隔太久
* 避免在Transactions中參雜使用者交談介面,ex.使用者輸入資料
* 避免使用巢狀式交易
* 可用 ==Select **@@transaction**== 查詢Transaction在第幾層
* 使用Rollback Tran 讓@@trancount=0
:::danger
**必考!**
工具-> 選項-> 查詢執行-> ANSI-> **SET IMPLICIT_TRANSACTIONS**
預設為Off
當打勾(SET Implicit_Transactions **ON**)時,所有動作皆被視為交易
->使用者需自己下Commit Tran 或 Rollback transaction

*在選項改任何設定,都要新增查詢(用新的視窗)才能看到改變*
:::
## Transactions限制
* Backup Log
* Restore Log
* Create DataBase
* Alter DataBase
* Drop DataBase
* Restore DataBase
* Reconfigure
* Update Statistics