このトピックでは、自動インクリメント主キー列を設定する方法について説明します。パーティションキーではない主キー列を自動インクリメント主キー列として指定できます。自動インクリメント主キー列を含むテーブルにデータを書き込む場合、自動インクリメント主キー列の値を指定する必要はありません。Tablestoreは、自動インクリメント主キー列の値を自動的に生成します。自動インクリメント主キー列に対して生成される値は一意であり、パーティション内で単調に増加します。
Tablestore SDK for PHP V4.0.0 以降では、自動インクリメント主キー列を設定できます。
使用上の注意
自動インクリメント主キー列を含むテーブルにデータを書き込む場合は、自動インクリメント主キー列に対して生成された値を返し、後続のデータ更新またはデータ読み取りのために値を記録するようにシステムを設定する必要があります。
前提条件
OTSClient インスタンスが初期化されていること。詳細については、OTSClient インスタンスを初期化するを参照してください。
自動インクリメント主キー列を設定する
テーブルを作成するときに、パーティションキーではない主キー列を自動インクリメント主キー列に設定できます。
INTEGER 型の主キー列のみを自動インクリメント主キー列として指定できます。自動インクリメント主キー列に対して生成される各値は、LONG データ型の 64 ビット符号付き整数です。
テーブルにデータを書き込むときは、自動インクリメント主キー列の値を指定する必要はありません。自動インクリメント主キー列の値をプレースホルダーに設定するだけで済みます。
テーブルにデータが書き込まれた後に自動インクリメント主キー列の値を取得する場合は、ReturnType を ReturnTypeConst::CONST_PK に設定できます。
テーブルからデータを読み取るときは、すべての主キー列の値を指定する必要があります。完全な主キー値を取得するには、PutRow、UpdateRow、または BatchWriteRow で ReturnType を ReturnTypeConst::CONST_PK に設定します。
データテーブルからデータを読み取るときに、完全な主キーが記録されている場合は、主キーに基づいてデータを読み取ることができます。詳細については、1 行のデータを読み取るおよび複数行のデータを一度に読み取るを参照してください。自動インクリメント主キー列の値が記録されていない場合は、最初の主キー列の値に基づいてデータの範囲を決定してから、データを読み取る必要があります。詳細については、主キー値が特定の範囲内にあるデータを読み取るを参照してください。
説明既存の行を更新する場合に自動インクリメント主キー列の値を記録していない場合は、データを更新する前に GetRange オペレーションを呼び出して、行の主キー情報を取得します。
例
CreateTable、PutRow、UpdateRow、または BatchWriteRow オペレーションを呼び出すときに、自動インクリメント主キー列機能を使用できます。
テーブルを作成する
テーブルを作成するときに自動インクリメント主キー列を作成するには、主キー列の属性を AUTO_INCR に設定する必要があります。
次のサンプルコードは、自動インクリメント主キー列を含むデータテーブルを作成する方法の例を示しています。テーブルには、STRING 型の pk1 主キー列と INTEGER 型の pk2 主キー列が含まれています。 pk1 主キー列はパーティションキーであり、pk2 主キー列は自動インクリメント主キー列です。
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] // 2 番目の主キー列の名前を PK_2 に設定し、2 番目の主キー列の型を INTEGER に設定し、2 番目の主キー列を自動インクリメント主キー列に設定します。 ] ], 'reserved_throughput' => [ 'capacity_unit' => [ // 予約済み読み取りスループットと予約済み書き込みスループットの両方を 0 CU に設定します。 'read' => 0, 'write' => 0 ] ], 'table_options' => [ 'time_to_live' => -1, // データが期限切れにならないように指定します。 'max_versions' => 1, // 各属性列のデータの 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'], // リスト形式で最初の主キー列の名前と値を指定します。 ['PK_2', null, PrimaryKeyTypeConst::CONST_PK_AUTO_INCR] // 2 番目の主キー列を自動インクリメント主キー列に設定します。値を指定する必要はありません。代わりに、自動インクリメント主キー列の値を PrimaryKeyTypeConst::CONST_PK_AUTO_INCR に設定するだけで済みます。Tablestore は値を自動的に生成します。 ], 'attribute_columns' => [ // リスト形式で属性列を指定します。 ['name', 'John'], // [属性列名、属性列値、属性列タイプ、およびタイムスタンプ]。指定されていないパラメーターは無視します。 ['age', 20], ['address', 'Alibaba'], ['product', 'OTS'], ['married', false] ], 'return_content' => [ 'return_type' => ReturnTypeConst::CONST_PK // return_type を ReturnTypeConst::CONST_PK に設定して、自動インクリメント主キー列の値を返します。 ] ]; $ret = $otsClient->putRow($row); print_r($ret); $primaryKey = $ret['primary_key']; // 取得した主キー値は、GetRow、UpdateRow、DeleteRow などの操作に渡すことができます。 return $primaryKey; }