すべてのプロダクト
Search
ドキュメントセンター

Tablestore:アトミックカウンターの使用

最終更新日:Aug 13, 2026

Tablestore SDK for Go を使用して、行レベルで INTEGER の属性列をアトミックに増分または減分し、同一リクエスト内で更新後の値を返します。

前提条件

Tablestore SDK for Go をインストールし、クライアントを初期化します。

説明

IncrementColumn を呼び出して、INTEGER の属性列に対してアトミックカウンター操作を実行します。正の値は列を増分し、負の値は列を減分します。サーバーは行レベルの原子性を保証し、新しいデータバージョンを書き込みます。同一リクエスト内で更新後の値を返すには、AppendIncrementColumnToReturn を呼び出して列を指定し、SetReturnIncrementValue を呼び出して戻り値の型を設定します。

func (rowchange *UpdateRowChange) IncrementColumn(columnName string, value int64)
func (rowchange *UpdateRowChange) AppendIncrementColumnToReturn(name string)
func (rowchange *UpdateRowChange) SetReturnIncrementValue()

次のサンプルは、example_table テーブルの row1 行にある score 列を 10 増分し、更新後の値を返します。

primaryKey := &tablestore.PrimaryKey{}
primaryKey.AddPrimaryKeyColumn("id", "row1")

change := &tablestore.UpdateRowChange{
    TableName:  "example_table",
    PrimaryKey: primaryKey,
}
change.IncrementColumn("score", int64(10))
change.SetCondition(tablestore.RowExistenceExpectation_EXPECT_EXIST)
change.AppendIncrementColumnToReturn("score")
change.SetReturnIncrementValue()

response, err := client.UpdateRow(&tablestore.UpdateRowRequest{UpdateRowChange: change})
if err != nil {
    log.Fatal(err)
}
fmt.Println(response.Columns[0].Value)

パラメーター

UpdateRowChange には、アトミックカウンターに関連する次のパラメーターが含まれます。

名前

型

説明

TableName (必須)

string

テーブル名。

PrimaryKey (必須)

*PrimaryKey

対象行の完全なプライマリキー。

Columns (必須)

[]ColumnToUpdate

属性列の操作。IncrementColumn を呼び出してアトミックカウンター操作を追加します。正の増分は INTEGER 列を増分し、負の増分は減分します。列が存在しない場合、初期値は 0 です。

Condition (必須)

*RowCondition

更新条件。詳細については、「条件付き更新の使用」をご参照ください。

ReturnType (任意)

ReturnType

戻り値の型。SetReturnIncrementValue を呼び出すと、このパラメーターは ReturnType_RT_AFTER_MODIFY に設定されます。

ColumnNamesToReturn (任意)

[]string

更新後の値を返すアトミックカウンター列。AppendIncrementColumnToReturn を呼び出して列を追加します。

TransactionId (任意)

*string

ローカルトランザクション ID。ローカルトランザクション内でアトミックカウンター操作を実行する場合にのみ、このパラメーターを指定します。

レスポンス

UpdateRowResponse には、アトミックカウンターに関連する次のビジネスフィールドが含まれます。

フィールド

型

説明

Columns

[]*AttributeColumn

ReturnType_RT_AFTER_MODIFY が指定されている場合、このフィールドには、AppendIncrementColumnToReturn で指定された列の更新後の値が含まれます。

制限

  • INTEGER の属性列のみサポートされています。対象列が存在しない場合、初期値は 0 です。列が存在しても INTEGER 列ではない場合、パラメーターエラーが返されます。

  • 増分は正または負にできますが、結果がオーバーフローしないことが条件です。

  • アトミックカウンターは最新バージョンに対してのみ動作し、指定したタイムスタンプはサポートされません。この操作により新しいデータバージョンが書き込まれます。

  • 同一リクエスト内で、アトミックカウンター操作と、上書きや削除などの別の操作を同じ列に対して実行することはできません。

  • BatchWriteRow リクエストでは、アトミックカウンター操作を含む行は 1 回のみ指定できます。

重要

ネットワークタイムアウトまたはシステムエラーにより、クライアントがリトライしてアトミックカウンター操作を複数回実行する場合があります。最終的な列の値を厳密に制御する必要がある場合は、条件付き更新を使用して楽観的ロックを実装してください。