0

Spanner - 插入或更新并增加先前的值。

CREATE TABLE dailyWeeklyPoints (
  userId STRING(MAX) NOT NULL,
  cumulativePoints INT64 NOT NULL,

) PRIMARY KEY(userId);

我有一个像上面这样的模式:

  1. 如果该行不存在,我想插入一个新行并将累积值设置为新值。
  2. 如果该行以当前值 = 当前值 + 新值的形式存在,我想用增加的值更新一行。

我在此案例的扳手文档中找不到参考

4

1 回答 1

0

您可以通过读/写事务来实现此操作。在 Java 中,这将如下所示:

DatabaseClient dbClient;
String userId;
Long newValue;

dbClient.RunTransaction(transaction -> {
  Struct row = transaction.readRow("dailyWeeklyPoints", 
    Key.of(userId), Arrays.asList("cumulativePoints"));
  if (row == null) {
    transaction.buffer(Mutation.newInsertBuilder("dailyWeeklyPoints")
      .set("userId")
      .to(userId)
      .set("cumulativePoints")
      .to(newValue));
  } else {
    transaction.buffer(Mutation.newUpdateBuilder("dailyWeeklyPoints")
      .set("userId")
      .to(userId)
      .set("cumulativePoints")
      .to(row.GetLong(0) + newValue));
  }
  return null;
});

您还可以使用 SELECT 查询,后跟 INSERT 语句或 UPDATE 语句,使用与上述相同的结构。

于 2022-01-26T18:12:21.173 回答