---
# System prepended metadata

title: L15 Transactions交易
tags: [SQL]

---

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


![](https://i.imgur.com/v6mGX2h.png =50%x)

當Begin TRAN一路執行到Commit TRAN後，
紀錄會被儲存在**Log檔**中，等待**Checkpoint檢查點寫入**
If Checkpoint前完成交易，寫入資料庫
If Checkpoint後完成交易，等待下一個Checkpoint寫入

:anger: If到下一個Checkpoint但系統故障
等到系統復原(Recovery)時
未完成交易的會被**Roll Back還原**
已完成交易的會被**Roll Forward寫入**(Writing)

![](https://i.imgur.com/OijiTHx.png =80%x)

## 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

![](https://i.imgur.com/0kqprP4.png)
*在選項改任何設定，都要新增查詢(用新的視窗)才能看到改變*
:::


## Transactions限制
* Backup Log
* Restore Log
* Create DataBase
* Alter DataBase
* Drop DataBase
* Restore DataBase
* Reconfigure
* Update Statistics
