space_object:upsert()
-
object
space_object¶ -
space_object:upsert({tuple}, {{operator, field_identifier, value}, ...})¶ Обновить или вставить кортеж.
Если уже существует кортеж, который совпадает с ключевыми полями
tuple, запрос приведет к тому же результату, что и space_object:update(), и используется параметр{{operator, field_identifier, value}, ...}. Если нет кортежа, который совпадает с ключевыми полямиtuple, запрос приведет к тому же результату, что и space_object:insert(), и используется параметр{tuple}. Однако, в отличие отinsertилиupdate,upsertне считывает кортеж и не выполняет проверку на ошибки перед возвратом — это функциональная особенность, которая повышает производительность, но требует большей осторожности от пользователя.Параметры: - space_object (
space_object) – ссылка на объект - tuple (
table/tuple) – вставляемый по умолчанию кортеж, если не найдет аналог - operator (
string) – тип операции, представленный строкой - field_identifier (
number) – к какому полю применяется операция - value (
lua_value) – какое значение применяется
возвращает: null
Возможные ошибки:
- Нельзя изменять поле первичного ключа.
- Нельзя проводить операцию upsert в спейсе, в котором есть уникальный вторичный индекс.
ER_TRANSACTION_CONFLICT, если транзакция стала конфликтной в транзакционном режиме MVCC.
Факторы сложности: Размер индекса, тип индекса, количество индексов, к которым получен доступ, настройки журнала упреждающей записи (WAL).
Пример:
box.space.tester:upsert({12,'c'}, {{'=', 3, 'a'}, {'=', 4, 'b'}})
Для получения дополнительной информации о сценариях использования и типичных ошибках, см. Пример: использование операций с данными далее в разделе.
- space_object (
-