全部產品
Search
文件中心

Tablestore:主鍵列自增

更新時間:Sep 20, 2025

設定非分區鍵的主鍵列為自增列後,在寫入資料時,無需為自增列設定具體值,Tablestore會自動產生自增列的值。該值在分區鍵層級唯一且嚴格遞增。

特點

主鍵列自增具有如下特點:

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

  • 自增列的資料類型為64位的有符號長整型。

  • 自增列是資料表層級的,同一個執行個體下可以有自增列或者非自增列的資料表。

說明

無論是否使用主鍵列自增功能,不影響條件更新的規則,條件更新的規則請參見條件更新

注意事項

  • 每張資料表最多隻能設定一個主鍵列為自增列,主鍵中的分區鍵不能設定為自增列。

  • 只能在建立資料表時指定自增列,對於已存在的資料表不能建立自增列。

  • 只有整型的主鍵列才能設定為自增列,系統自動產生的自增列值為64位的有符號長整型。

  • 屬性列不能設定為自增列。

  • 主鍵自增列功能和局部事務功能不能同時使用。

  • 寫入資料到帶有自增主鍵列的表時,請務必返回並記錄自增列的值,以便用於後續資料更新或者資料讀取。

介面

主鍵列自增的相關介面說明請參見下表。

介面

說明

CreateTable

建立資料表時,請設定非分區鍵的主鍵列為自增列,否則無法使用主鍵列自增功能。

UpdateTable

資料表建立後,不能通過UpdateTable修改資料表的主鍵列為自增列。

PutRow

寫入資料時,無需為自增列設定具體值,Tablestore會自動產生自增列的值。

通過設定ReturnType為RT_PK,可以擷取完整的主索引值,完整的主索引值可以用於GetRow查詢資料。

重要

要更新已存在的行資料時,如果未記錄自增主鍵列的值,請先通過GetRange介面擷取要更新的行主鍵資訊,然後再進行資料更新。

UpdateRow

BatchWriteRow

GetRow

使用GetRow時需要完整的主索引值,通過設定PutRow、UpdateRow或者BatchWriteRow中的ReturnType為RT_PK可以擷取完整的主索引值。

重要

寫入資料時,如果未記錄自增主鍵列的值,您可以使用範圍讀取資料按照第一個主鍵列確定範圍讀取資料。更多資訊,請參見範圍讀取資料

BatchGetRow

使用方式

使用控制台

  1. 建立帶有自增主鍵列的資料表。

    1. 登入Table Store控制台

    2. 概覽頁面,單擊執行個體操作列的執行個體管理

    3. 執行個體詳情頁簽的資料表列表地區,單擊建立資料表

    4. 建立資料表對話方塊,配置資料表名稱表主鍵,其他參數請根據實際情境進行配置。

      配置表主鍵時,您需要將其中一個非分區鍵的主鍵列類型選擇為自增列

      說明

      關於參數配置的更多資訊,請參見資料表操作

    5. 單擊建立

  2. 寫入資料。

    1. 執行個體詳情頁簽的資料表列表地區,單擊資料表名稱。

    2. 資料管理頁簽,單擊插入資料

    3. 插入資料對話方塊,輸入主索引值以及根據實際增加屬性列。

      其中自增列的值無需填寫,系統會在寫入資料時自動產生自增列的值。通過多次單擊image表徵圖並配置屬性列的名稱、類型、屬性值等資訊,您可以增加多個屬性列。

    4. 單擊確定

      系統會顯示寫入成功的資料。請記錄行資料的完整主鍵資訊用於後續更新或者讀取資料。

使用命令列工具

  1. 建立並使用帶有自增主鍵列的資料表。

    1. 執行create命令建立資料表。更多資訊,請參見建立表

      以下樣本用於建立帶有自增主鍵列的mytable資料表。該資料表有uid(string類型)和pid(integer類型)兩個主鍵列並設定第二主鍵列pid(integer類型)為自增列,表中資料永不到期。

      create -t mytable --pk '[{"c":"uid", "t":"string"}, {"c":"pid", "t":"integer", "opt":"auto"}]'
    2. 執行use --wc -t mytable命令使用資料表。

  2. 執行put命令寫入一行資料。更多資訊,請參見插入新資料

    說明

    寫入資料後,如果需要擷取完整主鍵資訊,您可以執行scan命令擷取指定行資料。更多資訊,請參見掃描資料或者匯出資料

    以下樣本用於在資料表中插入一行資料。該行的第一主鍵列值為“86”,第二主鍵列值為null,屬性列有name(string類型)和country(string類型)兩列。

    put --pk '["86", null]' --attr '[{"c":"name", "v":"redchen"}, {"c":"country", "v":"china"}]'

使用SDK

您可以通過Java SDKGo SDKPython SDKNode.js SDK.NET SDKPHP SDK使用主鍵自增列功能。此處以Java SDK為例介紹主鍵自增列的使用。

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

public static void putRowTest(SyncClient client) {
    // 構造主鍵
    PrimaryKeyBuilder primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
    primaryKeyBuilder.addPrimaryKeyColumn("id", PrimaryKeyValue.fromString("row1"));
    // 設定自增列為預留位置
    primaryKeyBuilder.addPrimaryKeyColumn("incr", PrimaryKeyValue.AUTO_INCREMENT);
    PrimaryKey primaryKey = primaryKeyBuilder.build();

    // 構造寫入行資料
    RowPutChange rowPutChange = new RowPutChange("test_table", primaryKey);
    rowPutChange.addColumn("col1", ColumnValue.fromString("val1"));
    // 設定傳回型別為 RT_PK,返回寫入行資料的主鍵資訊
    rowPutChange.setReturnType(ReturnType.RT_PK);

    // 調用 putRow 方法寫入行資料
    PutRowRequest putRowRequest = new PutRowRequest();
    putRowRequest.setRowChange(rowPutChange);
    PutRowResponse putRowResponse = client.putRow(putRowRequest);

    // RequestId 和 讀寫 CU 消耗
    System.out.println("RequestId: " + putRowResponse.getRequestId());
    System.out.println("Read CU Cost: " + putRowResponse.getConsumedCapacity().getCapacityUnit().getReadCapacityUnit());
    System.out.println("Write CU Cost: " + putRowResponse.getConsumedCapacity().getCapacityUnit().getWriteCapacityUnit());

    // 擷取返回的主鍵資訊並列印,如果不設定傳回型別為 RT_PK,預設不返回主鍵資訊
    Row row = putRowResponse.getRow();
    if(row != null)
        System.out.println(row.getPrimaryKey().toString());
}

計費說明

使用主鍵列自增功能不影響現有計費規則,返回的主鍵列資料不會額外消耗讀CU。