Как spanner.Mutation понимает, какую строку обновить

Из документации:

Изменение значений столбцов в существующей строке очень похоже на вставку новой строки:

m := spanner.Update("User",
  []string{"user_id", "profile"},
  []interface{}{UserID, profile})
_, err := client.Apply(ctx, []*spanner.Mutation{m})

Как Spanner понимает, какую строку нужно обновить? Я вижу, что отсутствует пункт WHERE. Использует ли он автоматически некоторые поля в качестве ключа (например, неявный user_id = "...")?

Создание API ввода вопросов на разных языках программирования (Python, PHP, Go и Node.js)
Создание API ввода вопросов на разных языках программирования (Python, PHP, Go и Node.js)
API ввода вопросов - это полезный инструмент для интеграции моделей машинного обучения, таких как ChatGPT, в приложения, требующие обработки...
0
0
91
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Cloud Spanner автоматически использует первичный ключ таблицы, которую обновляет мутация. Это означает, что вы должны включить все столбцы первичного ключа в мутацию Update. Таким образом, одна мутация Update также обновит только одну строку (и вернет ошибку NOT_FOUND, если строка не существует).

Это также означает, что невозможно обновить значение первичного ключа строки. Вместо этого вы должны удалить строку и вставить новую, если хотите «изменить» значение первичного ключа.

См. https://cloud.google.com/spanner/docs/reference/rpc/google.spanner.v1#mutation для получения дополнительной информации о том, как работают мутации.

Можете ли вы дать ссылку на какую-либо документацию, подтверждающую это, если это возможно?

thor 23.11.2022 18:01

И означает ли это, что нельзя обновить первичный ключ?

thor 23.11.2022 18:13

Правильно, значение первичного ключа не может быть обновлено. Я также добавил ссылку на документацию.

Knut Olav Løite 23.11.2022 19:27

Означает ли это также, что ключевые поля всегда должны быть включены, иначе мутация завершится ошибкой?

thor 24.11.2022 07:21

да, мутация Update должна включать значение для всех столбцов первичного ключа, в противном случае она не будет выполнена.

Knut Olav Løite 24.11.2022 07:28

Другие вопросы по теме