从文档中:更改现有行中列的值与插入新行非常相似:
m := spanner.Update("User", []string{"user_id", "profile"}, []interface{}{UserID, profile}) _, err := client.Apply(ctx, []*spanner.Mutation{m})
Spanner如何知道要更新哪一行?我发现它缺少WHERE子句。它是否自动使用某些字段作为键(如隐式user_id = "...")?
WHERE
user_id = "..."
xdnvmnnf1#
Cloud Spanner将自动使用该变化正在更新的表的主键。这意味着您必须在Update变化中包含主键的所有列。因此,一个Update变化也将只更新一行(如果该行不存在,它将返回NOT_FOUND错误)。这也表示无法更新数据列的主索引键值。如果您要“变更”主索引键值,就必须删除数据列,然后插入新的数据列。请访问https://cloud.google.com/spanner/docs/reference/rpc/google.spanner.v1#mutation了解有关突变如何工作的更多信息。
Update
NOT_FOUND
1条答案
按热度按时间xdnvmnnf1#
Cloud Spanner将自动使用该变化正在更新的表的主键。这意味着您必须在
Update
变化中包含主键的所有列。因此,一个Update
变化也将只更新一行(如果该行不存在,它将返回NOT_FOUND
错误)。这也表示无法更新数据列的主索引键值。如果您要“变更”主索引键值,就必须删除数据列,然后插入新的数据列。
请访问https://cloud.google.com/spanner/docs/reference/rpc/google.spanner.v1#mutation了解有关突变如何工作的更多信息。