Spanner - 插入或更新并增加先前的值。
CREATE TABLE dailyWeeklyPoints (
userId STRING(MAX) NOT NULL,
cumulativePoints INT64 NOT NULL,
) PRIMARY KEY(userId);
我有一个像上面这样的模式:
- 如果该行不存在,我想插入一个新行并将累积值设置为新值。
- 如果该行以当前值 = 当前值 + 新值的形式存在,我想用增加的值更新一行。
我在此案例的扳手文档中找不到参考
Spanner - 插入或更新并增加先前的值。
CREATE TABLE dailyWeeklyPoints (
userId STRING(MAX) NOT NULL,
cumulativePoints INT64 NOT NULL,
) PRIMARY KEY(userId);
我有一个像上面这样的模式:
我在此案例的扳手文档中找不到参考
您可以通过读/写事务来实现此操作。在 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 语句,使用与上述相同的结构。