Управление экземплярами
For general information and examples, see section Transactions.
Соблюдайте следующие правила в работе с транзакциями:
Правило #1
Запросы в транзакции должны отправляться на сервер в виде единого блока. Недостаточно просто размещать их между началом транзакции и коммитом или откатом. Чтобы убедиться, что они отправляются в виде единого блока: поместите их в функцию, поместите их на одну строку или используйте символы-разделители, чтобы многостроковые запросы обрабатывались совместно.
Правило #2
Все операции с базой данных в рамках транзакции должны работать с одним движком баз данных. Небезопасно в рамках одной транзакции получать доступ к наборам кортежей, которые определяются по {engine='vinyl'}
, а также к наборам кортежей, которые определяются по {engine='memtx'}
.
Правило #3
Requests which cause changes to the data definition
– create, alter, drop, truncate – are only allowed with
Tarantool version 2.1 or later.
Data-definition requests which change an index
or change a format, such as
space_object:create_index() and
space_object:format(),
are not allowed inside transactions except as the first request
after box.begin()
.
Ниже приведен перечень всех функций для управления транзакциями.
Имя | Использование |
---|---|
box.begin() | Начало транзакции |
box.commit() | Окончание транзакции и сохранение всех изменений |
box.rollback() | Окончание транзакции и отмена всех изменений |
box.savepoint() | Получение дескриптора точки сохранения |
box.rollback_to_savepoint() | Запрещение окончания транзакции и отмена всех изменений, сделанных после точки сохранения |
box.atomic() | Выполнение функции как транзакции |
box.on_commit() | Определение триггера, активируемого по box.commit |
box.on_rollback() | Определение триггера, активируемого по box.rollback |
box.is_in_txn() | Обозначение наличия активной транзакции |