交易 (Azure Synapse Analytics 和 Microsoft Fabric)

適用于: Microsoft Fabric 中的 Azure Synapse Analytics Analytics 平臺系統 (PDW)倉儲

交易是一組一或多個全部認可或全部復原的資料庫陳述式。 每個交易都是不可部分完成、一致、隔離和耐用 (ACID)。 如果交易成功,表示認可交易中的所有陳述式。 如果交易失敗,表示群組中至少有一個陳述式失敗,然後整個群組都會復原。

交易的開始和結束取決於 AUTOCOMMIT 設定,和 BEGIN TRANSACTION、COMMIT 和 ROLLBACK 陳述式。

支援下列類型的交易:

  • 明確交易會以 BEGIN TRANSACTION 陳述式開始,並以 COMMIT 或 ROLLBACK 陳述式結束。

  • 自動認可交易會在工作階段中自動起始,而不會以 BEGIN TRANSACTION 陳述式開始。 當 AUTOCOMMIT 設定為 ON 時,交易中會執行每個陳述式,而且不需要明確的 COMMIT 或 ROLLBACK。 當 AUTOCOMMIT 設定為 OFF 時,就需要 COMMIT 或 ROLLBACK 陳述式,才能決定交易的結果。 自動認可交易會在 COMMIT 或 ROLLBACK 語句之後,或 SET AUTOCOMMIT OFF 語句之後立即開始。

Transact-SQL 語法慣例

注意

如需 Microsoft Fabric 中交易的詳細資訊,請參閱 Microsoft Fabric 中的交易。

語法

BEGIN TRANSACTION [;]  
COMMIT [ TRAN | TRANSACTION | WORK ] [;]  
ROLLBACK [ TRAN | TRANSACTION | WORK ] [;]  
SET AUTOCOMMIT { ON | OFF } [;]  
SET IMPLICIT_TRANSACTIONS { ON | OFF } [;]  

引數

BEGIN TRANSACTION
標示明確交易的起點。

COMMIT [ WORK ]
標示明確或自動認可交易的結束。 此陳述式會導致交易中的變更永久認可到資料庫。 陳述式 COMMIT 等同於 COMMIT WORK、COMMIT TRAN 和 COMMIT TRANSACTION。

ROLLBACK [ WORK ]
將交易復原到交易的開頭。 交易的變更不會認可到資料庫。 陳述式 ROLLBACK 等同於 ROLLBACK WORK、ROLLBACK TRAN 和 ROLLBACK TRANSACTION。

SET AUTOCOMMIT { ON | OFF }
決定如何開始和結束交易。

開啟
每個陳述式都在自己的交易下執行,而且不需要明確的 COMMIT 或 ROLLBACK 陳述式。 當 AUTOCOMMIT 是 ON 時,允許明確的交易。

OFF
Azure Synapse Analytics 和 Microsoft Fabric 會在交易尚未進行時自動起始交易。 交易會執行任何後續的陳述式,而且需要 COMMIT 或 ROLLBACK,才能決定交易的結果。 一旦交易認可或回復在此作業模式下,模式就會保持關閉,就會起始新的交易。 當 AUTOCOMMIT 是 OFF 時,不允許明確的交易。

如果您在作用中的交易內變更 AUTOCOMMIT 設定,設定會影響目前的交易,但是要在交易完成之後才會生效。

如果 AUTOCOMMIT 為 ON,執行另一個 SET AUTOCOMMIT ON 陳述式沒有任何作用。 同樣地,如果 AUTOCOMMIT 為 OFF,執行另一個 SET AUTOCOMMIT OFF 沒有任何作用。

SET IMPLICIT_TRANSACTIONS { ON | OFF }
這會切換為與 SET AUTOCOMMIT 相同的模式。 當設為 ON 時,SET IMPLICIT_TRANSACTIONS 會將連接設為隱含的交易模式。 當設為 OFF 時,會讓連線返回自動認可模式。 如需詳細資訊,請參閱 SET IMPLICIT_TRANSACTIONS (Transact-SQL)

權限

執行與交易相關的陳述式,不需要任何特定的權限。 在交易內執行陳述式則需要權限。

錯誤處理

如果執行 COMMIT 或 ROLLBACK,但沒有任何作用中交易,會引發錯誤。

如果交易正在進行時執行 BEGIN TRANSACTION,會引發錯誤。 如果在 BEGIN TRANSACTION 陳述式成功之後,或當工作階段處於 SET AUTOCOMMIT OFF 時執行 BEGIN TRANSACTION,就會發生這個錯誤。

如果執行時間語句錯誤以外的錯誤導致無法順利完成明確交易,daabase 引擎會自動回復交易,並釋放交易所持有的所有資源。 例如,如果用戶端的網路連線中斷,或用戶端登出應用程式,當網路通知中斷的實例時,會回復連線的任何未認可交易。

如果批次中發生運行時語句錯誤,Azure Synapse Analytics 和 Microsoft Fabric 的行為與 SQL Server 一致,XACT_ABORT 設定為 ON ,而且整個交易都會回復。 如需 XACT_ABORT 設定的詳細資訊,請參閱 SET XACT_ABORT (Transact-SQL)

一般備註

工作階段在指定的時間只能執行一個交易。不支援儲存點和巢狀交易。

程式設計人員只有在交易所參考的所有資料都邏輯正確時,才負責發出 COMMIT。

當工作階段在交易完成之前終止時,交易會復原。

交易模式是在工作階段的層級進行管理。 例如,如果一個工作階段開始明確交易、將 AUTOCOMMIT 設為 OFF,或將 IMPLICIT_TRANSACTIONS 設為 ON,都不會影響任何其他工作階段的交易模式。

限制事項

您不能在發出 COMMIT 陳述式之後復原交易,因為資料修改已成為資料庫的永久部份。

在明確交易中不能使用 CREATE DATABASE (Azure Synapse Analytics)DROP DATABASE (Transact-SQL) 命令。

Azure Synapse Analytics 和 Microsoft Fabric 沒有交易共用機制。 這表示在任何給定的時間點,只有一個工作階段可以在系統中進行任何交易。

鎖定行為

鎖定可確保交易的完整性,並在多個使用者同時存取資料時維持資料庫的一致性。 隱含交易和明確交易都使用鎖定。 每個交易會對資源要求不同類型的鎖定,例如交易相依的資料表或資料庫。

所有鎖定都是資料表層級或更高層級。 鎖定會阻擋其他交易修改資源,以免造成要求鎖定的交易發生問題。 每個交易會在對鎖定的資源不再具有相依性時釋出鎖定。明確交易則會在交易完成 (無論是認可或復原) 之前維持鎖定。

範例:

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

下列範例將 AUTOCOMMIT 設定設為 ON

SET AUTOCOMMIT ON;  

下列範例將 AUTOCOMMIT 設定設為 OFF

SET AUTOCOMMIT OFF;  

D. 使用隱含的多重陳述式交易

SET AUTOCOMMIT OFF;  
CREATE TABLE ValueTable (id INT);  
INSERT INTO ValueTable VALUES(1);  
INSERT INTO ValueTable VALUES(2);  
COMMIT;  

下一步