全部產品
Search
文件中心

Tablestore:主鍵列自增

更新時間:Jul 20, 2024

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

說明

從PHP SDK 4.0.0版本開始支援主鍵列自增功能。

注意事項

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

前提條件

已初始化Client。具體操作,請參見初始化OTSClient

使用方法

  1. 建立表時,將非分區鍵的主鍵列設定為自增列。

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

  2. 寫入資料時,無需為自增列設定具體值,只需將自增列的值設定為預留位置。

    如果需要擷取寫入資料後系統自動產生的自增列的值,將ReturnType設定為ReturnTypeConst::CONST_PK,可以在資料寫入成功後返回自增列的值。

    讀取資料時,需要完整的主索引值。通過設定PutRow、UpdateRow或者BatchWriteRow中的ReturnType為ReturnTypeConst::CONST_PK可以擷取完整的主索引值。

    讀取資料時,如果已記錄完整的主鍵,您可以使用讀取單行資料或者批量讀取資料方式讀取資料;如果未記錄自增主鍵列的值,您可以使用範圍讀取資料方式按照第一個主鍵列確定範圍讀取資料。

    說明

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

樣本

主鍵自增列功能主要涉及建立表(CreateTable)和寫資料(PutRow、UpdateRow和BatchWriteRow)兩類介面。

  1. 建立表

    建立表時,只需將自增的主鍵屬性設定為AUTO_INCR。

    以下樣本用於建立資料表時配置主鍵自增列。該表的主鍵為PK_1(String類型)、PK_2(Integer類型),其中PK_1主鍵列為分區鍵,PK_2主鍵列為自增列。

    function createTable($otsClient) 
    {
        $request = [
            'table_meta' => [
                'table_name' => 'table_name',       //設定資料表名稱。
                'primary_key_schema' => [
                    ['PK_1', PrimaryKeyTypeConst::CONST_STRING],    //第一個主鍵列(又叫分區鍵)名稱為PK_1, 類型為STRING。
                    ['PK_2', PrimaryKeyTypeConst::CONST_INTEGER, PrimaryKeyOptionConst::CONST_PK_AUTO_INCR]
                    //第二個主鍵列名稱為PK_2, 類型為INTEGER, 並且設定為自增列。
                ]
            ],
            'reserved_throughput' => [
                'capacity_unit' => [         //預留讀寫輸送量設定為0個讀CU和0個寫CU。
                    'read' => 0,
                    'write' => 0
                ]
            ],
            'table_options' => [
                'time_to_live' => -1,             //設定為資料永不到期。
                'max_versions' => 1,              //只儲存一個版本。
                'deviation_cell_version_in_sec' => 86400   //資料有效版本偏差,單位秒。
            ]
        ];
        $otsClient->createTable($request);
    }                    
  2. 寫資料

    寫入資料時,無需為自增列設定具體值,只需將自增列的值設定為預留位置AUTO_INCR。

    function putRow($otsClient)
    {
        $row = [
            'table_name' => 'table_name',
            'primary_key' => [
                ['PK_1', 'Hangzhou'],                      //主鍵名和主索引值,此處為list。
                ['PK_2', null, PrimaryKeyTypeConst::CONST_PK_AUTO_INCR]    //主鍵自增列,此處無需填入具體值,只需要一個預留位置PrimaryKeyTypeConst::CONST_PK_AUTO_INCR,Table Store會自動產生此值。
            ],
            'attribute_columns' => [              //屬性列,此處為list。
                ['name', 'John'],                  //[屬性名稱, 屬性值, 屬性類型, 時間戳記],未設定時可以忽略。
                ['age', 20],
                ['address', 'Alibaba'],
                ['product', 'OTS'],
                ['married', false]
            ],
            'return_content' => [
                'return_type' => ReturnTypeConst::CONST_PK     //返回自增列的主索引值需要設定return_type。
            ]
        ];
        $ret = $otsClient->putRow($row);
        print_r($ret);
    
        $primaryKey = $ret['primary_key'];   //此處擷取到的primaryKey可以傳遞給GetRow、UpdateRow、DeleteRow等API使用。
        return $primaryKey;
    }