diff --git a/ydb/docs/en/core/concepts/_includes/transactions.md b/ydb/docs/en/core/concepts/_includes/transactions.md index 271c91d64174..0aa338ed3105 100644 --- a/ydb/docs/en/core/concepts/_includes/transactions.md +++ b/ydb/docs/en/core/concepts/_includes/transactions.md @@ -31,6 +31,31 @@ For transactions that read column-oriented tables, use: {% endnote %} +### Implicit Transactions {#implicit} + +If no [transaction mode](../transactions.md#modes) is specified for a query, {{ ydb-short-name }} automatically manages its behavior. This mode is called an **implicit transaction**. + +In this mode, based on the query, {{ ydb-short-name }} decides whether to execute it outside a transaction or wrap it in a transaction with *Serializable* mode. Implicit transactions are a universal way to execute queries, as they support statements of any kind with a certain behavior described below. + +#### Behavior for Different Types of Statements + +- **[Data Definition Language](https://en.wikipedia.org/wiki/Data_definition_language) (DDL) Statements** + DDL statements (such as [`CREATE TABLE`](../../yql/reference/syntax/create_table/index.md), [`DROP TABLE`](../../yql/reference/syntax/drop_table.md), etc.) are executed outside a transaction. A query can consist only of DDL statements. If an error occurs, changes made by previous statements in the query are not rolled back. + +- **[Data Manipulation Language](https://en.wikipedia.org/wiki/Data_manipulation_language) (DML) Statements** + DML statements (such as [`SELECT`](../../yql/reference/syntax/select/index.md), [`UPSERT`](../../yql/reference/syntax/upsert_into.md), [`UPDATE`](../../yql/reference/syntax/update.md), etc.) are wrapped in a transaction with *Serializable* mode. A query can consist only of DML statements. On success, changes are committed. If an error occurs, all changes are rolled back. + +- **Batch Modification Statements** + Batch modification statements (such as [`BATCH UPDATE`](../../yql/reference/syntax/batch-update.md) and [`BATCH DELETE`](../../yql/reference/syntax/batch-delete.md)) are executed outside a transaction. A query can contain only one batch modification statement. If an error occurs, the statement's changes are not rolled back. + +#### Summary Table + +| Statement Type | Implicit Transaction Handling | Multistatement Support | Rollback on Error | +|----------------|---------------------------------------------------|------------------------|-----------------------| +| DDL | Outside a transaction | Yes (DDL-only) | No | +| DML | Auto transaction (Serializable) | Yes (DML-only) | Yes | +| Batch Modification Statements | Outside a transaction | No | No | + The transaction execution mode is specified in its settings when creating the transaction. See the examples for the {{ ydb-short-name }} SDK in the [{#T}](../../recipes/ydb-sdk/tx-control.md). ## YQL language {#language-yql} diff --git a/ydb/docs/en/core/concepts/glossary.md b/ydb/docs/en/core/concepts/glossary.md index 7dc0721f85b6..58a96c9b23dd 100644 --- a/ydb/docs/en/core/concepts/glossary.md +++ b/ydb/docs/en/core/concepts/glossary.md @@ -102,6 +102,10 @@ Together, these mechanisms allow {{ ydb-short-name }} to provide [strict consist The implementation of distributed transactions is covered in a separate article [{#T}](../contributor/datashard-distributed-txs.md), while below there's a list of several [related terms](#deterministic-transactions). +### Implicit Transactions {#implicit-transactions} + +An **implicit transaction** is the query execution mode used when the [transaction mode](transactions.md#modes) is not specified. {{ ydb-short-name }} automatically determines the behavior for each statement — whether to wrap it in a transaction or execute it outside one. This mode is described in more detail in [{#T}](transactions.md#implicit). + ### Interactive transactions {#interactive-transaction} The term **interactive transactions** refers to transactions that are split into multiple queries and involve data processing by an application between these queries. For example: diff --git a/ydb/docs/en/core/yql/reference/syntax/batch-delete.md b/ydb/docs/en/core/yql/reference/syntax/batch-delete.md index 974f70c9d060..c01f9ee8a7e6 100644 --- a/ydb/docs/en/core/yql/reference/syntax/batch-delete.md +++ b/ydb/docs/en/core/yql/reference/syntax/batch-delete.md @@ -13,7 +13,7 @@ This query, like the standard `DELETE FROM`, executes synchronously and returns The semantics are inherited from the standard `DELETE FROM` with the following restrictions: * Supported only for [row-oriented tables](../../../concepts/glossary.md#row-oriented-table). -* Supported only for queries with implicit transaction control (`NoTx` mode or `EmptyTxControl` in SDK). +* Supported only for queries with [implicit transaction control](../../../concepts/transactions.md#implicit). * The use of subqueries and multiple statements in a single query is prohibited. * The `RETURNING` clause is unavailable. diff --git a/ydb/docs/en/core/yql/reference/syntax/batch-update.md b/ydb/docs/en/core/yql/reference/syntax/batch-update.md index 0b60e0baba7b..4e130feb481d 100644 --- a/ydb/docs/en/core/yql/reference/syntax/batch-update.md +++ b/ydb/docs/en/core/yql/reference/syntax/batch-update.md @@ -13,7 +13,7 @@ This query, like the standard `UPDATE`, executes synchronously and returns a sta The semantics are inherited from the standard `UPDATE` with the following restrictions: * Supported only for [row-oriented tables](../../../concepts/glossary.md#row-oriented-table). -* Supported only for queries with implicit transaction control (`NoTx` mode or `EmptyTxControl` in SDK). +* Supported only for queries with [implicit transaction control](../../../concepts/transactions.md#implicit). * Only idempotent updates are supported: expressions following `SET` should not depend on the current values of the columns being modified. * The use of subqueries and multiple statements in a single query is prohibited. * The `RETURNING` clause is unavailable. diff --git a/ydb/docs/ru/core/concepts/_includes/transactions.md b/ydb/docs/ru/core/concepts/_includes/transactions.md index 9209ced64471..0ab95ca68a6d 100644 --- a/ydb/docs/ru/core/concepts/_includes/transactions.md +++ b/ydb/docs/ru/core/concepts/_includes/transactions.md @@ -31,6 +31,31 @@ {% endnote %} +### Неявные транзакции {#implicit} + +Если для запроса не задан [режим транзакции](../transactions.md#modes), {{ ydb-short-name }} автоматически управляет его поведением. Такой режим называется неявной транзакцией. + +В этом режиме {{ ydb-short-name }} на основе запроса определяет, выполнить его вне транзакции или обернуть в транзакцию с режимом *Serializable*. Режим неявной транзакции является универсальным для выполнения запроса, так как поддерживает инструкции любого вида с определённым поведением, описанным ниже. + +#### Поведение для разных видов инструкций + +- **Инструкции [Data Definition Language](https://en.wikipedia.org/wiki/Data_definition_language) (DDL)** + DDL-инструкции (такие как [CREATE TABLE](../../yql/reference/syntax/create_table/index.md), [DROP TABLE](../../yql/reference/syntax/drop_table.md) и т.д.) выполняются вне транзакции. Запрос может состоять только из DDL-инструкций. При возникновении ошибки изменения, внесённые предыдущими инструкциями запроса, не откатываются. + +- **Инструкции [Data Manipulation Language](https://en.wikipedia.org/wiki/Data_manipulation_language) (DML)** + DML-инструкции (такие как [UPSERT](../../yql/reference/syntax/upsert_into.md), [SELECT](../../yql/reference/syntax/select/index.md), [UPDATE](../../yql/reference/syntax/update.md) и т.д.) оборачиваются в транзакцию с режимом *Serializable*. Запрос может состоять только из DML-инструкций. При успешном выполнении изменения коммитятся (фиксируются), а при возникновении ошибки — откатываются. + +- **Инструкции пакетного изменения** + Инструкции пакетного изменения (такие как [BATCH UPDATE](../../yql/reference/syntax/batch-update.md) и [BATCH DELETE FROM](../../yql/reference/syntax/batch-delete.md)) выполняются вне транзакции. Запрос может состоять только из одной инструкции пакетного изменения. При возникновении ошибки изменения инструкции не откатываются. + +#### Сводная таблица + +| Тип инструкции | Обработка неявной транзакции | Поддержка нескольких инструкций | Откат при ошибке | +|----------------|---------------------------------------------------|---------------------------------|-----------------------| +| DDL | Вне транзакции | Да (только DDL) | Нет | +| DML | Автоматическая транзакция (Serializable) | Да (только DML) | Да | +| Инструкции пакетного изменения | Вне транзакции | Нет | Нет | + Режим выполнения транзакции задается в настройках транзакции при ее создании. Примеры для {{ ydb-short-name }} SDK смотрите в статье [{#T}](../../recipes/ydb-sdk/tx-control.md). ## Язык YQL {#language-yql} diff --git a/ydb/docs/ru/core/concepts/glossary.md b/ydb/docs/ru/core/concepts/glossary.md index 8f696afd7572..90a102ec9fd2 100644 --- a/ydb/docs/ru/core/concepts/glossary.md +++ b/ydb/docs/ru/core/concepts/glossary.md @@ -106,6 +106,10 @@ {% endif %} +### Неявные транзакции {#implicit-transactions} + +**Неявная транзакция** — это режим выполнения запросов, при котором [режим транзакции](transactions.md#modes) не указан. В этом случае {{ ydb-short-name }} самостоятельно определяет, нужно ли обернуть их в транзакцию. Этот режим описан более подробно в [{#T}](transactions.md#implicit). + ### Многоверсионное управление параллелизмом {#mvcc} [**Многоверсионное управление параллелизмом**](https://ru.wikipedia.org/wiki/MVCC), **multi-version concurrency control** или **MVCC** — это метод, используемый {{ ydb-short-name }} для одновременного доступа нескольких параллельных транзакций к базе данных без взаимных помех. Он описан более подробно в отдельной статье [{#T}](mvcc.md). diff --git a/ydb/docs/ru/core/yql/reference/syntax/batch-delete.md b/ydb/docs/ru/core/yql/reference/syntax/batch-delete.md index b91046ceecc9..f6e1a1dafc2a 100644 --- a/ydb/docs/ru/core/yql/reference/syntax/batch-delete.md +++ b/ydb/docs/ru/core/yql/reference/syntax/batch-delete.md @@ -13,7 +13,7 @@ Семантика наследуется от стандартного `DELETE FROM` с ограничениями: * Поддерживается только для [строковых таблиц](../../../concepts/glossary.md#row-oriented-table). -* Поддерживается только для неявного контроля транзакции (режим `NoTx` или `EmptyTxControl` в SDK). +* Поддерживается только в режиме [неявного контроля транзакций](../../../concepts/transactions.md#implicit). * Запрещено использование подзапросов и нескольких выражений в одном запросе. * Недоступно ключевое слово `RETURNING`. diff --git a/ydb/docs/ru/core/yql/reference/syntax/batch-update.md b/ydb/docs/ru/core/yql/reference/syntax/batch-update.md index 9e7ba7e91827..97f32b680070 100644 --- a/ydb/docs/ru/core/yql/reference/syntax/batch-update.md +++ b/ydb/docs/ru/core/yql/reference/syntax/batch-update.md @@ -14,7 +14,7 @@ Семантика наследуется от стандартного `UPDATE` с ограничениями: * Поддерживается только для [строковых таблиц](../../../concepts/glossary.md#row-oriented-table). -* Поддерживается только для неявного контроля транзакции (режим `NoTx` или `EmptyTxControl` в SDK). +* Поддерживается только в режиме [неявного контроля транзакций](../../../concepts/transactions.md#implicit). * Поддерживаются только идемпотентные обновления: выражения после `SET` не должны зависеть от текущих значений изменяемых колонок. * Запрещено использование подзапросов и нескольких выражений в одном запросе. * Недоступно ключевое слово `RETURNING`.