適用於:Azure Synapse Analytics
Analytics Platform System (PDW)
交易是一組一或多個全部認可或全部復原的資料庫陳述式。 每個交易都是不可部分完成、一致、隔離和耐用 (ACID)。 如果交易成功,表示認可交易中的所有陳述式。 如果交易失敗,表示群組中至少有一個陳述式失敗,然後整個群組都會復原。
注意
Microsoft Fabric Data Warehouse 不支援此 SET AUTOCOMMIT 命令。 如需 Microsoft Fabric Data Warehouse 中交易、隔離、並行和一致性的詳細資訊,請參閱 Fabric Data Warehouse 中的交易。
交易的開始和結束取決於 AUTOCOMMIT 設定以及 BEGIN TRANSACTION、 COMMIT和 ROLLBACK 陳述式。
支援下列型態的交易:
明確交易以陳述式開
BEGIN TRANSACTION頭,以 orROLLBACK陳述式結尾COMMIT。自動認可交易會在 會話內自動起始,而且不會以陳述式開
BEGIN TRANSACTION頭。- 當設定為
AUTOCOMMITON時,每個陳述式都會在交易中執行,且不需要明確或COMMITROLLBACK。 - 當設定為
AUTOCOMMITOFF時,需要 或COMMITROLLBACK陳述式來判斷交易的結果。 自動認可交易會立即在 orROLLBACK陳述式之後COMMIT或陳述式之後SET AUTOCOMMIT OFF開始。
- 當設定為
語法
BEGIN TRANSACTION [;]
COMMIT [ TRAN | TRANSACTION | WORK ] [;]
ROLLBACK [ TRAN | TRANSACTION | WORK ] [;]
SET AUTOCOMMIT { ON | OFF } [;]
SET IMPLICIT_TRANSACTIONS { ON | OFF } [;]
引數
開始交易
標示明確交易的起點。
提交 [ 工作 ]
標示明確或自動認可交易的結束。 此陳述式會導致交易中的變更永久認可到資料庫。 該陳述式 COMMIT 與 COMMIT WORK、 COMMIT TRAN和 COMMIT TRANSACTION相同。
回滾 [ 工作 ]
將交易復原到交易的開頭。 交易的變更不會認可到資料庫。 該陳述式 ROLLBACK 與 ROLLBACK WORK、 ROLLBACK TRAN和 ROLLBACK TRANSACTION相同。
SET AUTOCOMMIT { ON |關閉 }
決定如何開始和結束交易。
如果您在 AUTOCOMMIT 作用中交易中變更設定,則設定會影響目前的交易,且在交易完成之前不會生效。
如果是,則AUTOCOMMIT執行另一個SET AUTOCOMMIT ON陳述式沒有ON作用。 同樣,如果是 OFF,則AUTOCOMMIT運行另一個也SET AUTOCOMMIT OFF沒有效果。
開啟
每個陳述式都在自己的交易下運行,不需要明確或COMMITROLLBACK陳述式。 當 AUTOCOMMIT 時 ON允許明確交易。
OFF
Azure Synapse Analytics 會在交易尚未進行時自動起始交易。 任何後續陳述式都會作為交易的一部分執行,且 或 COMMITROLLBACK 是判斷交易結果的必要條件。 一旦事務在這種操作模式下提交或回滾,該模式就會保持不變 OFF,就會啟動新的事務。 不 AUTOCOMMIT 允許明確交易 when 是 OFF。
設定 IMPLICIT_TRANSACTIONS { 開 |關閉 }
這會切換與 SET AUTOCOMMIT相同的模式。 當 ON, SET IMPLICIT_TRANSACTIONS 將連線設定為隱含交易模式。 當 OFF時,它會將連線傳回自動認可模式。 如需詳細資訊,請參閱 SET IMPLICIT_TRANSACTIONS (Transact-SQL)。
權限
執行與交易相關的陳述式,不需要任何特定的權限。 在交易內執行陳述式則需要權限。
錯誤處理
如果執行 或 ROLLBACK ,且沒有作用中交易,則COMMIT會引發錯誤。
如果在交易進行中時執行 , BEGIN TRANSACTION 則會引發錯誤。 如果在成功BEGIN TRANSACTION陳述式之後發生 ,BEGIN TRANSACTION或當工作階段處於 SET AUTOCOMMIT OFF.
如果運行時間語句錯誤以外的錯誤導致無法順利完成明確交易,資料庫引擎會自動回復交易,並釋放交易所持有的所有資源。 例如,如果用戶端的網路連線中斷或用戶端登出應用程式,則當網路通知執行個體中斷時,會回復連線的任何未確定交易。
如果批次中發生執行階段陳述式錯誤,Azure Synapse Analytics 的行為會與設定為 的 ON SQL Server XACT_ABORT 一致,並復原整個交易。 有關設定XACT_ABORT的詳細資訊,請參閱 SET XACT_ABORT (Transact-SQL)。
備註
工作階段在指定的時間只能執行一個交易。不支援儲存點和巢狀交易。
程式設計師有責任僅在交易所參照的所有資料在邏輯上正確時發出。COMMIT
當工作階段在交易完成之前終止時,交易會復原。
交易模式是在工作階段的層級進行管理。 例如,如果一個階段作業開始明確交易,或設定 AUTOCOMMIT 為 OFF,或 IMPLICIT_TRANSACTIONS 設定為 ON,則對任何其他階段作業的交易模式沒有影響。
局限性
您無法在發出陳述式之後回復 COMMIT 交易,因為資料修改已成為資料庫的永久部分。
CREATE DATABASE 和 DROP DATABASE (Transact-SQL) 指令無法在明確交易內使用。
Azure Synapse Analytics 沒有交易共用機制。 這表示在任何給定的時間點,只有一個工作階段可以在系統中進行任何交易。
鎖定機制
鎖定可確保交易的完整性,並在多個用戶同時存取數據時維持資料庫的一致性。 隱含交易和明確交易都使用鎖定。 每個交易會對資源要求不同類型的鎖定,例如交易相依的資料表或資料庫。
所有鎖定都是數據表層級或更高層級。 鎖定會阻擋其他交易修改資源,以免造成要求鎖定的交易發生問題。 每個交易會在對鎖定的資源不再具有相依性時釋出鎖定。明確交易則會在交易完成 (無論是認可或復原) 之前維持鎖定。
範例
A. 使用明確交易
BEGIN TRANSACTION;
DELETE FROM HumanResources.JobCandidate
WHERE JobCandidateID = 13;
COMMIT;
B. 復原開啟的交易
下列範例示範復原交易的效果。 在此範例中, ROLLBACK 陳述式會復 INSERT 原陳述式,但建立的資料表仍會存在。
CREATE TABLE ValueTable (id INT);
BEGIN TRANSACTION;
INSERT INTO ValueTable VALUES(1);
INSERT INTO ValueTable VALUES(2);
ROLLBACK;
C. 設定 AUTOCOMMIT
下列範例將設定設定為 AUTOCOMMITON。
SET AUTOCOMMIT ON;
下列範例將設定設定為 AUTOCOMMITOFF。
SET AUTOCOMMIT OFF;
D. 使用隱含的多語句交易
SET AUTOCOMMIT OFF;
CREATE TABLE ValueTable (id INT);
INSERT INTO ValueTable VALUES(1);
INSERT INTO ValueTable VALUES(2);
COMMIT;