Go SDK 可在创建数据表时将非分区主键列配置为自增列,并在写入数据时获取服务端生成的自增值。
前提条件
安装Tablestore Go SDK并初始化客户端。
功能说明
主键列自增包含配置自增列、写入自增占位符和获取自增值三个步骤。
只能在创建数据表时将非分区主键列配置为自增列。自增列必须为整数类型,每张数据表最多配置一个自增列。服务端生成的自增值为 64 位有符号整数。
自增值在同一分区键内唯一且严格递增,但不保证连续。主键列自增和局部事务不能同时使用。
配置自增主键列
创建数据表时,调用 AddPrimaryKeyColumnOption 并将主键列配置设置为 AUTO_INCREMENT。
以下示例创建 example_table 数据表,使用 user_id 作为分区键,使用 record_id 作为自增主键列。
tableMeta := &tablestore.TableMeta{TableName: "example_table"}
tableMeta.AddPrimaryKeyColumn("user_id", tablestore.PrimaryKeyType_STRING)
tableMeta.AddPrimaryKeyColumnOption(
"record_id",
tablestore.PrimaryKeyType_INTEGER,
tablestore.AUTO_INCREMENT,
)
request := &tablestore.CreateTableRequest{
TableMeta: tableMeta,
TableOption: &tablestore.TableOption{TimeToAlive: -1, MaxVersion: 1},
ReservedThroughput: &tablestore.ReservedThroughput{},
}
_, err := client.CreateTable(request)
if err != nil {
log.Fatal(err)
}
创建数据表后,等待数据表加载完成再写入数据。
写入数据并获取自增值
写入数据时,调用 AddPrimaryKeyColumnWithAutoIncrement 为自增列设置占位符,并调用 SetReturnPk 使响应返回包含自增值的完整主键。自增主键写入的行存在性条件必须设置为 RowExistenceExpectation_IGNORE。
以下示例写入一行数据并获取服务端生成的 record_id 值。
primaryKey := &tablestore.PrimaryKey{}
primaryKey.AddPrimaryKeyColumn("user_id", "user-a")
primaryKey.AddPrimaryKeyColumnWithAutoIncrement("record_id")
change := &tablestore.PutRowChange{
TableName: "example_table",
PrimaryKey: primaryKey,
}
change.AddColumn("status", "created")
change.SetCondition(tablestore.RowExistenceExpectation_IGNORE)
change.SetReturnPk()
response, err := client.PutRow(&tablestore.PutRowRequest{PutRowChange: change})
if err != nil {
log.Fatal(err)
}
fmt.Println(response.PrimaryKey)
参数说明
自增主键列
PrimaryKeySchema 包含以下与主键列自增相关的参数。
|
名称 |
类型 |
说明 |
|
Name(必选) |
|
自增主键列名称。 |
|
Type(必选) |
|
必须设置为 |
|
Option(必选) |
|
必须设置为 |
写入配置
PutRowChange 包含以下与主键列自增相关的参数。
|
名称 |
类型 |
说明 |
|
PrimaryKey(必选) |
|
行主键。自增列必须通过 |
|
Condition(必选) |
|
行存在性条件。主键列自增写入必须设置为 |
|
ReturnType(可选) |
|
返回类型。默认值为 |
返回值
PutRowResponse 中与主键列自增直接相关的返回字段如下。
|
字段 |
类型 |
说明 |
|
|
|
写入行的完整主键。仅设置 |