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 (
-