Транзакции (Azure Synapse Analytics)Transactions (Azure Synapse Analytics)

Применимо к:Applies to: даAzure Synapse AnalyticsAzure Synapse AnalyticsyesAzure Synapse AnalyticsAzure Synapse Analytics даПараллельное хранилище данныхParallel Data WarehouseyesПараллельное хранилище данныхParallel Data WarehouseПрименимо к:Applies to: даAzure Synapse AnalyticsAzure Synapse AnalyticsyesAzure Synapse AnalyticsAzure Synapse Analytics даПараллельное хранилище данныхParallel Data WarehouseyesПараллельное хранилище данныхParallel Data Warehouse

Транзакция — это группа инструкций одной или нескольких баз данных, которые либо полностью фиксируются, либо полностью откатываются.A transaction is a group of one or more database statements that are either wholly committed or wholly rolled back. Транзакции атомарны, согласованы, изолированы и устойчивы (atomic, consistent, isolated, durable — ACID).Each transaction is atomic, consistent, isolated, and durable (ACID). Если транзакция выполнена успешно, все инструкции в ней фиксируются.If the transaction succeeds, all statements within it are committed. Если транзакция завершается ошибкой, то если хотя бы одна инструкция в группе завершается ошибкой, выполняется откат всей группы.If the transaction fails, that is at least one of the statements in the group fails, then the entire group is rolled back.

Начало и конец транзакции зависят от параметра AUTOCOMMIT и инструкций BEGIN TRANSACTION, COMMIT и ROLLBACK.The beginning and end of transactions depends on the AUTOCOMMIT setting and the BEGIN TRANSACTION, COMMIT, and ROLLBACK statements. Azure Synapse Analytics (Хранилище данных SQL)Azure Synapse Analytics (SQL Data Warehouse) поддерживает следующие типы транзакций:supports the following types of transactions:

  • Явные транзакции начинаются с инструкции BEGIN TRANSACTION и заканчиваются инструкцией COMMIT или ROLLBACK.Explicit transactions start with the BEGIN TRANSACTION statement and end with the COMMIT or ROLLBACK statement.

  • Транзакции с автофиксацией автоматически запускаются в рамках сеанса и не начинаются с инструкции BEGIN TRANSACTION.Auto-commit transactions initiate automatically within a session and do not start with the BEGIN TRANSACTION statement. Если для параметра AUTOCOMMIT установлено значение ON, каждая инструкция выполняется в транзакции, и явные инструкции COMMIT или ROLLBACK не требуются.When the AUTOCOMMIT setting is ON, each statement runs in a transaction and no explicit COMMIT or ROLLBACK is necessary. Если для параметра AUTOCOMMIT установлено значение OFF, для определения результата транзакции требуется инструкция COMMIT или ROLLBACK.When the AUTOCOMMIT setting is OFF, a COMMIT or ROLLBACK statement is required to determine the outcome of the transaction. В Azure Synapse Analytics (Хранилище данных SQL)Azure Synapse Analytics (SQL Data Warehouse) транзакции с автофиксацией начинаются сразу после инструкции COMMIT или ROLLBACK или после инструкции SET AUTOCOMMIT OFF.In Azure Synapse Analytics (Хранилище данных SQL)Azure Synapse Analytics (SQL Data Warehouse), autocommit transactions begin immediately after a COMMIT or ROLLBACK statement, or after a SET AUTOCOMMIT OFF statement.

Значок ссылки на раздел Синтаксические обозначения в Transact-SQL (Transact-SQL)Topic link icon Transact-SQL Syntax Conventions (Transact-SQL)

СинтаксисSyntax

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

АргументыArguments

BEGIN TRANSACTIONBEGIN TRANSACTION
Отмечает начальную точку явной транзакции.Marks the starting point of an explicit transaction.

COMMIT [ WORK ]COMMIT [ WORK ]
Отмечает завершение явной транзакции или транзакции с автофиксацией.Marks the end of an explicit or autocommit transaction. Эта инструкция вызывает изменения в транзакции, чтобы всегда быть зафиксированной в базе данных.This statement causes the changes in the transaction to be permanently committed to the database. Инструкция COMMIT идентична инструкциям COMMIT WORK, COMMIT TRAN и COMMIT TRANSACTION.The statement COMMIT is identical to COMMIT WORK, COMMIT TRAN, and COMMIT TRANSACTION.

ROLLBACK [ WORK ]ROLLBACK [ WORK ]
Выполняет откат транзакции на начало транзакции.Rolls back a transaction to the beginning of the transaction. Никакие изменения транзакции не фиксируются в базе данных.No changes for the transaction are committed to the database. Инструкция ROLLBACK идентична инструкциям ROLLBACK WORK, ROLLBACK TRAN и ROLLBACK TRANSACTION.The statement ROLLBACK is identical to ROLLBACK WORK, ROLLBACK TRAN, and ROLLBACK TRANSACTION.

SET AUTOCOMMIT { ON | OFF }SET AUTOCOMMIT { ON | OFF }
Определяет метод запуска и завершения транзакций.Determines how transactions can start and end.

ONON
Каждая инструкция выполняется в своей транзакции, явные инструкции COMMIT или ROLLBACK не требуются.Each statement runs under its own transaction and no explicit COMMIT or ROLLBACK statement is necessary. Явные транзакции разрешены, когда для параметра AUTOCOMMIT установлено значение ON.Explicit transactions are allowed when AUTOCOMMIT is ON.

OFFOFF
Azure Synapse Analytics (Хранилище данных SQL)Azure Synapse Analytics (SQL Data Warehouse) автоматически запускает транзакцию, если транзакция уже не выполняется.automatically initiates a transaction when a transaction is not already in progress. Все последующие инструкции выполняются в рамках транзакции, и инструкции COMMIT или ROLLBACK необходимы для определения результата транзакции.Any subsequent statements are run as part of the transaction and a COMMIT or ROLLBACK is necessary to determine the outcome of the transaction. Как только транзакция фиксируется или откатывается в этом режиме, значение OFF сохраняется, а Azure Synapse Analytics (Хранилище данных SQL)Azure Synapse Analytics (SQL Data Warehouse) запускает новую транзакцию.As soon as a transaction commits or rolls back under this mode of operation, the mode remains OFF, and Azure Synapse Analytics (Хранилище данных SQL)Azure Synapse Analytics (SQL Data Warehouse) initiates a new transaction. Явные транзакции не разрешены, если AUTOCOMMIT имеет значение OFF.Explicit transactions are not allowed when AUTOCOMMIT is OFF.

Если изменить параметр AUTOCOMMIT в активной транзакции, этот параметр не повлияет на текущую транзакцию и вступит в силу только после завершения транзакции.If you change the AUTOCOMMIT setting within an active transaction, the setting does affect the current transaction and does not take affect until the transaction is completed.

Если для параметра AUTOCOMMIT установлено значение ON, выполнение другой инструкции SET AUTOCOMMIT ON не будет иметь результата.If AUTOCOMMIT is ON, running another SET AUTOCOMMIT ON statement has no effect. Подобным образом, если для параметра AUTOCOMMIT установлено значение OFF, выполнение другой инструкции SET AUTOCOMMIT OFF не будет иметь результата.Likewise, if AUTOCOMMIT is OFF, running another SET AUTOCOMMIT OFF has no effect.

SET IMPLICIT_TRANSACTIONS { ON | OFF }SET IMPLICIT_TRANSACTIONS { ON | OFF }
Включает те же режимы, что и SET AUTOCOMMIT.This toggles the same modes as SET AUTOCOMMIT. Присвоение параметру SET IMPLICIT_TRANSACTIONS значения ON устанавливает для соединения режим неявных транзакций.When ON, SET IMPLICIT_TRANSACTIONS sets the connection into implicit transaction mode. Значение OFF возвращает подключение в режим автофиксации.When OFF, it returns the connection to autocommit mode. Дополнительные сведения см. в разделе SET IMPLICIT_TRANSACTIONS (Transact-SQL).For more information, see SET IMPLICIT_TRANSACTIONS (Transact-SQL).

РазрешенияPermissions

Для выполнения инструкций, связанных с транзакциями, не нужны конкретные разрешения.No specific permissions are required to run the transaction-related statements. Разрешения необходимы для запуска инструкций внутри транзакции.Permissions are required to run the statements within the transaction.

Обработка ошибокError Handling

Если выполнить инструкции COMMIT или ROLLBACK без активной транзакции, возникает ошибка.If COMMIT or ROLLBACK are run and there is no active transaction, an error is raised.

Если выполнить инструкцию BEGIN TRANSACTION во время выполнения транзакции, возникает ошибка.If a BEGIN TRANSACTION is run while a transaction is already in progress, an error is raised. Это может произойти, если инструкция BEGIN TRANSACTION выполняется после успешного запуска инструкции BEGIN TRANSACTION или для сеанса установлено SET AUTOCOMMIT OFF.This can occur if a BEGIN TRANSACTION occurs after a successful BEGIN TRANSACTION statement or when the session is under SET AUTOCOMMIT OFF.

Если ошибка делает невозможным успешное выполнение транзакции, Azure Synapse Analytics (Хранилище данных SQL)Azure Synapse Analytics (SQL Data Warehouse) автоматически выполняет ее откат и освобождает ресурсы, удерживаемые транзакцией. Это не относится к ошибкам во время выполнения инструкции.If an error other than a run-time statement error prevents the successful completion of an explicit transaction, Azure Synapse Analytics (Хранилище данных SQL)Azure Synapse Analytics (SQL Data Warehouse) automatically rolls back the transaction and frees all resources held by the transaction. Например, если сетевое подключение клиента к экземпляру компонента Azure Synapse Analytics (Хранилище данных SQL)Azure Synapse Analytics (SQL Data Warehouse) разорвано или клиент выходит из приложения, то после того, как экземпляр получит уведомление от сети о разрыве подключения, выполняется откат всех незафиксированных транзакций для этого подключения.For example, if the client's network connection to an instance of Azure Synapse Analytics (Хранилище данных SQL)Azure Synapse Analytics (SQL Data Warehouse) is broken or the client logs off the application, any uncommitted transactions for the connection are rolled back when the network notifies the instance of the break.

Если ошибка во время выполнения инструкции возникает в пакетном режиме, Azure Synapse Analytics (Хранилище данных SQL)Azure Synapse Analytics (SQL Data Warehouse) ведет себя так, будто для параметра SQL ServerSQL ServerXACT_ABORT установлено значение ON, и выполняет откат всей транзакции.If a run-time statement error occurs in a batch, Azure Synapse Analytics (Хранилище данных SQL)Azure Synapse Analytics (SQL Data Warehouse) behaves consistent with SQL ServerSQL ServerXACT_ABORT set to ON and the entire transaction is rolled back. Дополнительные сведения о параметре XACT_ABORT см. в разделе SET XACT_ABORT (Transact-SQL).For more information about the XACT_ABORT setting, see SET XACT_ABORT (Transact-SQL).

Общие замечанияGeneral Remarks

Сеанс может одновременно выполнять только одну транзакцию. Точки сохранения и вложенные транзакции не поддерживаются.A session can only run one transaction at a given time; save points and nested transactions are not supported.

Обязанностью программиста на языке SQLSQL является вызов инструкции COMMIT только в том случае, когда все данные, относящиеся к транзакции, логически верны.It is the responsibility of the SQLSQL programmer to issue COMMIT only at a point when all data referenced by the transaction is logically correct.

Если сеанс закрывается до завершения транзакции, транзакция откатывается.When a session is terminated before a transaction completes, the transaction is rolled back.

Управление режимами транзакций выполняется на уровне сеанса.Transaction modes are managed at the session level. Например, если один сеанс запускает явную транзакцию или устанавливает для параметра AUTOCOMMIT значение OFF или для параметра IMPLICIT_TRANSACTIONS значение ON, это не влияет на режимы транзакции в других сеансах.For example, if one session begins an explicit transaction or sets AUTOCOMMIT to OFF, or sets IMPLICIT_TRANSACTIONS to ON, it has no effect on the transaction modes of any other session.

ОграниченияLimitations and Restrictions

Нельзя произвести откат транзакции после вызова инструкции COMMIT, так как измененные данные уже стали частью базы данных.You cannot roll back a transaction after a COMMIT statement is issued because the data modifications have been made a permanent part of the database.

Команды CREATE DATABASE (Azure Synapse Analytics) и DROP DATABASE (Transact-SQL) недопустимо использовать в явной транзакции.The CREATE DATABASE (Azure Synapse Analytics) and DROP DATABASE (Transact-SQL) commands cannot be used inside an explicit transaction.

Azure Synapse Analytics (Хранилище данных SQL)Azure Synapse Analytics (SQL Data Warehouse) не поддерживает механизм общего доступа к транзакциям.does not have a transaction sharing mechanism. Это означает, что в любой момент времени только один сеанс может работать с транзакцией в системе.This implies that at any given point in time, only one session can be doing work on any transaction in the system.

Режим блокировкиLocking Behavior

Azure Synapse Analytics (Хранилище данных SQL)Azure Synapse Analytics (SQL Data Warehouse) использует блокировку для гарантии целостности транзакций и поддержания согласованности баз данных, когда несколько пользователей обращаются к одним и тем же данным в одно и то же время.uses locking to ensure the integrity of transactions and maintain the consistency of databases when multiple users are accessing data at the same time. Блокировка используется в явных и неявных транзакциях.Locking is used by both implicit and explicit transactions. Каждая транзакция запрашивает блокировку разных типов ресурсов, например таблиц или баз данных, от которых эта транзакция зависит.Each transaction requests locks of different types on the resources, such as tables or databases on which the transaction depends. Все блокировки Azure Synapse Analytics (Хранилище данных SQL)Azure Synapse Analytics (SQL Data Warehouse) выполняются на уровне таблиц или выше.All Azure Synapse Analytics (Хранилище данных SQL)Azure Synapse Analytics (SQL Data Warehouse) locks are table level or higher. Блокировка не дает другим транзакциям изменять ресурсы, чтобы избежать ошибок в транзакции, запросившей блокировку.The locks block other transactions from modifying the resources in a way that would cause problems for the transaction requesting the lock. Каждая транзакция снимает свои блокировки, если больше не зависит от заблокированных ресурсов. Явные транзакции сохраняют блокировки до завершения транзакции — ее фиксации или отката.Each transaction frees its locks when it no longer has a dependency on the locked resources; explicit transactions retain locks until the transaction completes when it is either committed or rolled back.

Примеры: Azure Synapse Analytics (Хранилище данных SQL)Azure Synapse Analytics (SQL Data Warehouse) и Параллельное хранилище данныхParallel Data WarehouseExamples: Azure Synapse Analytics (Хранилище данных SQL)Azure Synapse Analytics (SQL Data Warehouse) and Параллельное хранилище данныхParallel Data Warehouse

A.A. Использование явной транзакцииUsing an explicit transaction

BEGIN TRANSACTION;  
DELETE FROM HumanResources.JobCandidate  
    WHERE JobCandidateID = 13;  
COMMIT;  

Б.B. Откат транзакцииRolling back a transaction

В приведенном ниже примере демонстрируется результат отката транзакции.The following example shows the effect of rolling back a transaction. В этом примере инструкция ROLLBACK приведет к откату инструкции INSERT, но созданная таблица будет по-прежнему существовать.In this example, the ROLLBACK statement will roll back the INSERT statement, but the created table will still exist.

CREATE TABLE ValueTable (id INT);  
BEGIN TRANSACTION;  
       INSERT INTO ValueTable VALUES(1);  
       INSERT INTO ValueTable VALUES(2);  
ROLLBACK;  

В.C. Настройка параметра AUTOCOMMITSetting AUTOCOMMIT

В следующем примере для параметра AUTOCOMMIT устанавливается значение ON.The following example sets the AUTOCOMMIT setting to ON.

SET AUTOCOMMIT ON;  

В следующем примере для параметра AUTOCOMMIT устанавливается значение OFF.The following example sets the AUTOCOMMIT setting to OFF.

SET AUTOCOMMIT OFF;  

Г.D. Использование неявных транзакций из нескольких инструкцийUsing an implicit multi-statement transaction

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

См. такжеSee Also

SET IMPLICIT_TRANSACTIONS (Transact-SQL) SET IMPLICIT_TRANSACTIONS (Transact-SQL)
SET TRANSACTION ISOLATION LEVEL (Transact-SQL) SET TRANSACTION ISOLATION LEVEL (Transact-SQL)
@@TRANCOUNT (Transact-SQL)@@TRANCOUNT (Transact-SQL)