主键列自增

更新时间:
复制 MD 格式

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(必选)

string

自增主键列名称。

Type(必选)

PrimaryKeyType

必须设置为 PrimaryKeyType_INTEGER

Option(必选)

PrimaryKeyOption

必须设置为 AUTO_INCREMENT

写入配置

PutRowChange 包含以下与主键列自增相关的参数。

名称

类型

说明

PrimaryKey(必选)

*PrimaryKey

行主键。自增列必须通过 AddPrimaryKeyColumnWithAutoIncrement 设置占位符。

Condition(必选)

*RowCondition

行存在性条件。主键列自增写入必须设置为 RowExistenceExpectation_IGNORE

ReturnType(可选)

ReturnType

返回类型。默认值为 ReturnType_RT_NONE,不返回主键信息;调用 SetReturnPk 设置为 ReturnType_RT_PK 后,响应返回包含自增值的完整主键。

返回值

PutRowResponse 中与主键列自增直接相关的返回字段如下。

字段

类型

说明

PrimaryKey

PrimaryKey

写入行的完整主键。仅设置 ReturnType_RT_PK 时返回,其中包含服务端生成的自增值。