在Cloud Spanner SQL中,似乎我只能通过主键执行UPDATE或DELETE操作。即使是这两个操作的API方法也有一个参数,特别需要一个PK值列表来处理。 在这样的操作中,我不能使用基于非PK字段的标准吗?
答案 0 :(得分:2)
没有。抱歉,所有UPDATE和DELETE操作都必须涉及他们正在影响的表的主键。
它可能有点像kludge,但你可以做的是从SELECT语句获取PK值列表(它确实让你的WHERE子句使用非PK字段),并传递该列表PK值为UPDATE或DELETE操作。
答案 1 :(得分:0)
您可以尝试将Statement{}
与ReadWriteTransaction()
一起使用。
spannerClient.ReadWriteTransaction(ctx, func(ctx context.Context, txn *spanner.ReadWriteTransaction) error {
rowCount, err := txn.Update(ctx, spanner.Statement{
SQL: "update TABLE_NAME set UPDATE_COLUME=UPDATE_VALUE where CONDITION_COLUMN = @CONDITION_COLUMN",
Params: map[string]interface{}{
"CONDITION_COLUMN": "CONDITION_VALUE",
},
})
if err != nil {
return err
}
if rowCount == 0 {
return errors.New("no such record")
}
})