C++ SDK支持主键列自增。如果您设置某一列主键为自增列,在写入一行数据时,这一列主键不用填值,表格存储会自动为您生成这一列主键的值,这个值在分区键上保证唯一,且严格递增。详细信息请参见主键列自增

创建表

注意 自增主键列必须是整型,并且需要设置 PrimaryKeyColumnSchema::AutoIncrement
CreateTableRequest req;
{
    // immutable configurations of the table
    TableMeta& meta = req.mutableMeta();
    meta.mutableTableName() = kTableName;
    Schema& schema = meta.mutableSchema();
    {
        PrimaryKeyColumnSchema& pkColSchema = schema.append();
        pkColSchema.mutableName() = "ShardKey";
        pkColSchema.mutableType() = kPKT_String;
    }
    {
        PrimaryKeyColumnSchema& pkColSchema = schema.append();
        pkColSchema.mutableName() = "AutoIncrKey";
        pkColSchema.mutableType() = kPKT_Integer;
        pkColSchema.mutableOption().reset(PrimaryKeyColumnSchema::AutoIncrement);
    }
}
CreateTableResponse resp;
Optional<OTSError> res = client.createTable(resp, req);

写入数据

自增主键列的值由表格存储的服务端填入,因此,写入时主键列必须填入一个特殊的占位符,可以由PrimaryKeyValue::toAutoIncrement()取得该占位符对象。如果您想要读取这行数据,可以设置返回值包含主键,服务端会将主键中的自增主键列的占位符替换成实际的列值,然后返回,您可以记录下该主键用于后续使用。

本示例以单行覆写为例,其他写入接口类似。

PutRowRequest req;
{
    RowPutChange& chg = req.mutableRowChange();
    chg.mutableTable() = kTableName;
    chg.mutableReturnType() = RowChange::kRT_PrimaryKey;
    PrimaryKey& pkey = chg.mutablePrimaryKey();
    pkey.append() = PrimaryKeyColumn(
        "ShardKey",
        PrimaryKeyValue::toStr("shard0"));
    pkey.append() = PrimaryKeyColumn(
        "AutoIncrKey",
        PrimaryKeyValue::toAutoIncrement());
}