設定非分區鍵的主鍵列為自增列後,在寫入資料時,無需為自增列設定具體值,Tablestore會自動產生自增列的值。該值在分區鍵層級唯一且嚴格遞增。
從PHP SDK 4.0.0版本開始支援主鍵列自增功能。
注意事項
寫入資料到帶有自增主鍵列的表時,請務必返回並記錄自增列的值,用於後續資料更新或者資料讀取。
前提條件
已初始化Client。具體操作,請參見初始化OTSClient。
使用方法
建立表時,將非分區鍵的主鍵列設定為自增列。
只有整型的主鍵列才能設定為自增列,系統自動產生的自增列值為64位的有符號長整型。
寫入資料時,無需為自增列設定具體值,只需將自增列的值設定為預留位置。
如果需要擷取寫入資料後系統自動產生的自增列的值,將ReturnType設定為ReturnTypeConst::CONST_PK,可以在資料寫入成功後返回自增列的值。
讀取資料時,需要完整的主索引值。通過設定PutRow、UpdateRow或者BatchWriteRow中的ReturnType為ReturnTypeConst::CONST_PK可以擷取完整的主索引值。
讀取資料時,如果已記錄完整的主鍵,您可以使用讀取單行資料或者批量讀取資料方式讀取資料;如果未記錄自增主鍵列的值,您可以使用範圍讀取資料方式按照第一個主鍵列確定範圍讀取資料。
說明要更新已存在的行資料時,如果未記錄自增主鍵列的值,請先通過GetRange介面擷取要更新的行主鍵資訊,然後再進行資料更新。
樣本
主鍵自增列功能主要涉及建立表(CreateTable)和寫資料(PutRow、UpdateRow和BatchWriteRow)兩類介面。
建立表
建立表時,只需將自增的主鍵屬性設定為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); }
寫資料
寫入資料時,無需為自增列設定具體值,只需將自增列的值設定為預留位置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; }