全部產品
Search
文件中心

Tablestore:主鍵列自增

更新時間:Jun 20, 2025

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

注意事項

自增列產生的自增值在分區鍵層級唯一且嚴格遞增,但不保證連續。

前提條件

初始化Tablestore Client

設定主鍵列自增

您可以在建立資料表時將非分區主鍵列設定為自增列,對於已建立的資料表,無法設定自增列。

說明

只有整型的非分區主鍵列才能設定為自增列,一個資料表最多隻能設定一個自增列,自增列產生的值為 64 位元有符號長整型。

範例程式碼

以下範例程式碼建立了一個資料表 test_table,該表的主鍵包括分區鍵 id 和自增列 incr。

function createTableSample() {
    var createParams = {
        tableMeta: {
            tableName: 'test_table',
            primaryKey: [
                {
                    name: 'id',
                    type: 'STRING'
                },
                {
                    name: 'incr',
                    type: 'INTEGER',
                    option: 'AUTO_INCREMENT'
                },
            ]
        },
        tableOptions: {
            timeToLive: -1,
            maxVersions: 1
        },
        reservedThroughput: {
            capacityUnit: {
                read: 0,
                write: 0
            }
        },
    };

    client.createTable(createParams, function (err, data) {
        if (err) {
            console.error('error:', err);
            return;
        }
        console.log('success:', data);
    });
}

寫入資料

為自增列寫入資料時,只需要將自增列的值設定為預留位置。如果要擷取產生的自增值用於資料查詢和更新,還需要設定 returnType 的傳回型別為 Primarykey。

範例程式碼

以下範例程式碼在 test_table 表中寫入一行資料,同時擷取並列印寫入行資料的主鍵資訊。

function putRowSample() {
    var putParams = {
        tableName: 'test_table',
        condition: new TableStore.Condition(TableStore.RowExistenceExpectation.IGNORE, null),
        primaryKey: [
            { id: 'row1' },
            // 設定自增列為預留位置
            { incr: TableStore.PK_AUTO_INCR }
        ],
        attributeColumns: [
            { 'col1': 'val1' }
        ],
        // 設定傳回型別為 Primarykey,返回寫入行資料的主鍵資訊
        returnContent: { returnType: TableStore.ReturnType.Primarykey }
    };

    client.putRow(putParams, function (err, data) {
        if (err) {
            console.error('error:', err);
            return;
        }

        // RequestId 和 讀寫 CU 消耗
        console.log("RequestId: ", data.RequestId);
        console.log("Read CU Cost: ", data.consumed.capacityUnit.read);
        console.log("Write CU Cost: ", data.consumed.capacityUnit.write);

        // 擷取返回的主鍵資訊並列印,如果不設定傳回型別為 Primarykey,預設不返回主鍵資訊
        if (data.row.primaryKey) {
            console.log(JSON.stringify(data.row.primaryKey));
        }
    });
}