全部產品
Search
文件中心

Tablestore:原子計數器

更新時間:Aug 13, 2026

Go SDK 可對整型屬性列執行行級原子的遞增或遞減操作,並在同一請求中返回更新後的值。

前提條件

安裝Tablestore Go SDK並初始化用戶端。

功能說明

調用 IncrementColumn 對指定整型屬性列執行原子計數。正數表示遞增,負數表示遞減。服務端在行層級保證操作的原子性,並寫入一個新的資料版本。如需在同一請求中擷取更新後的值,調用 AppendIncrementColumnToReturn 指定返回列,並調用 SetReturnIncrementValue 設定傳回型別。

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

以下樣本將 example_tablerow1score 列增加 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 添加原子計數操作。列名為要更新的整型列,增量為正數時遞增、為負數時遞減。目標列不存在時以 0 為初始值。

Condition(必選)

*RowCondition

更新條件。更多資訊,請參見條件更新

ReturnType(可選)

ReturnType

傳回型別。調用 SetReturnIncrementValue 後設定為 ReturnType_RT_AFTER_MODIFY

ColumnNamesToReturn(可選)

[]string

要返回更新後值的原子計數列名稱。調用 AppendIncrementColumnToReturn 添加。

TransactionId(可選)

*string

局部事務 ID。僅在局部事務內執行原子計數時設定。

傳回值

UpdateRowResponse 中與原子計數器相關的業務欄位如下。

欄位

類型

說明

Columns

[]*AttributeColumn

設定 ReturnType_RT_AFTER_MODIFY 後,包含通過 AppendIncrementColumnToReturn 指定的屬性列更新後值。

使用限制

  • 只支援整型屬性列。目標列不存在時以 0 為初始值;目標列已存在但不是整型時返回參數錯誤。

  • 增量可以為正數或負數,但計算結果不能溢出。

  • 原子計數只操作最新版本,不支援指定時間戳記,操作後寫入一個新版本。

  • 同一請求中,不能對同一列同時執行原子計數和覆蓋寫、刪除等其他動作。

  • BatchWriteRow 請求中,執行原子計數的行只能出現一次。

重要

網路逾時或系統錯誤可能導致用戶端重試,使原子計數被執行多次。需要精確控制最終列值時,使用條件更新實現樂觀鎖。