全部产品
Search
文档中心

表格存储:主键列自增

更新时间:Jun 19, 2025

本文介绍如何通过 PHP SDK 为数据表设置主键列自增,以及如何为自增列写入数据并获取生成的自增值。

注意事项

  • 表格存储 PHP SDK 从 4.0.0 版本开始支持主键列自增。

  • 自增列生成的自增值在分区键级别唯一且严格递增,但不保证连续。

前提条件

初始化Tablestore Client

设置主键列自增

您可以在创建数据表时将非分区主键列设置为自增列,对于已创建的数据表,无法设置自增列。

说明

只有整型的非分区主键列才能设置为自增列,一个数据表最多只能设置一个自增列,自增列生成的值为 64 位有符号长整型。

示例代码

以下示例代码创建了一个数据表 test_table,该表的主键包括分区键 id 和自增列 incr。

function createTable($client) 
{
    $request = [
        'table_meta' => [
            'table_name' => 'test_table',
            'primary_key_schema' => [
                ['id', PrimaryKeyTypeConst::CONST_STRING],
                ['incr', PrimaryKeyTypeConst::CONST_INTEGER, PrimaryKeyOptionConst::CONST_PK_AUTO_INCR]
            ]
        ],
        'reserved_throughput' => [
            'capacity_unit' => [
                'read' => 0,
                'write' => 0
            ]
        ],
        'table_options' => [
            'time_to_live' => -1,
            'max_versions' => 1,
            'deviation_cell_version_in_sec' => 86400
        ]
    ];
    $client->createTable($request);
}

写入数据

为自增列写入数据时,只需要将自增列的值设置为占位符。如果要获取生成的自增值用于数据查询和更新,还需要设置 putRow 的返回类型为 CONST_PK。

示例代码

以下示例代码在 test_table 表中写入一行数据,同时获取并打印写入行数据的主键信息。

function putRow($client)
{
    $row = [
        'table_name' => 'test_table',
        'primary_key' => [
            ['id', 'row1'],
            // 设置自增列
            ['incr', null, PrimaryKeyTypeConst::CONST_PK_AUTO_INCR]
        ],
        'attribute_columns' => [
            ['col1', 'val1']
        ],
        'return_content' => [
            'return_type' => ReturnTypeConst::CONST_PK
        ]
    ];
    $result = $client->putRow($row);
    // 读写CU消耗
    echo "Read CU Cost: " . $result['consumed']['capacity_unit']['read'] . "\n";
    echo "Write CU Cost: " . $result['consumed']['capacity_unit']['write'] . "\n";

    // 获取返回的主键信息并打印,如果不设置返回类型为 CONST_PK,默认不返回主键信息
    if(!empty($result['primary_key'])){
        echo "Primary key: ";
        foreach ($result['primary_key'] as $primaryKey) {
            echo "(" . implode(", ", $primaryKey) . ")";
        }
    }
}