全部产品
弹性计算 会员服务 网络 安全 移动云 数加·大数据分析及展现 数加·大数据应用 管理与监控 云通信 阿里云办公 培训与认证 智能硬件
存储与CDN 数据库 域名与网站(万网) 应用服务 数加·人工智能 数加·大数据基础服务 互联网中间件 视频服务 开发者工具 解决方案 物联网 更多
表格存储

主键列自增

更新时间:2018-03-08 20:37:51

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

创建表

说明:自增主键列必须是整型,并且需要设置PrimaryKeyColumnSchema::AutoIncrement

  1. CreateTableRequest req;
  2. {
  3. // immutable configurations of the table
  4. TableMeta& meta = req.mutableMeta();
  5. meta.mutableTableName() = kTableName;
  6. Schema& schema = meta.mutableSchema();
  7. {
  8. PrimaryKeyColumnSchema& pkColSchema = schema.append();
  9. pkColSchema.mutableName() = "ShardKey";
  10. pkColSchema.mutableType() = kPKT_String;
  11. }
  12. {
  13. PrimaryKeyColumnSchema& pkColSchema = schema.append();
  14. pkColSchema.mutableName() = "AutoIncrKey";
  15. pkColSchema.mutableType() = kPKT_Integer;
  16. pkColSchema.mutableOption().reset(PrimaryKeyColumnSchema::AutoIncrement);
  17. }
  18. }
  19. CreateTableResponse resp;
  20. Optional<OTSError> res = client.createTable(resp, req);

写入数据

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

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

  1. PutRowRequest req;
  2. {
  3. RowPutChange& chg = req.mutableRowChange();
  4. chg.mutableTable() = kTableName;
  5. chg.mutableReturnType() = RowChange::kRT_PrimaryKey;
  6. PrimaryKey& pkey = chg.mutablePrimaryKey();
  7. pkey.append() = PrimaryKeyColumn(
  8. "ShardKey",
  9. PrimaryKeyValue::toStr("shard0"));
  10. pkey.append() = PrimaryKeyColumn(
  11. "AutoIncrKey",
  12. PrimaryKeyValue::toAutoIncrement());
  13. }
本文导读目录