全部產品
Search
文件中心

Tablestore:主鍵列自增

更新時間:Jun 20, 2025

本文介紹如何通過 PHP SDK 為資料表設定主鍵列自增,以及如何為自增列寫入資料並擷取產生的自增值。

注意事項

  • Table Store 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) . ")";
        }
    }
}