全部產品
Search
文件中心

Tablestore:更新單行資料

更新時間:Aug 06, 2026

Java SDK 可按完整主鍵新增、修改或刪除一行中的屬性列。

前提條件

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

功能說明

調用 updateRow 按完整主鍵更新一行資料,可新增或修改屬性列、刪除屬性列的指定版本或全部版本,以及執行原子計數。

public UpdateRowResponse updateRow(UpdateRowRequest updateRowRequest) throws TableStoreException, ClientException

以下樣本修改資料表 update_row_demo 中主索引值為 row1 的行,將屬性列 col1 的值改為 changed_val1

String tableName = "update_row_demo";

PrimaryKeyBuilder primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
primaryKeyBuilder.addPrimaryKeyColumn("id", PrimaryKeyValue.fromString("row1"));
PrimaryKey primaryKey = primaryKeyBuilder.build();

RowUpdateChange rowUpdateChange = new RowUpdateChange(tableName, primaryKey);
rowUpdateChange.put("col1", ColumnValue.fromString("changed_val1"));

client.updateRow(new UpdateRowRequest(rowUpdateChange));

參數說明

UpdateRowRequest 包含以下參數。

名稱

類型

說明

rowChange(必選)

RowUpdateChange

單行更新配置。

transactionId(可選)

String

局部事務 ID。僅在局部事務內更新資料時設定。

關於如何擷取和使用該 ID,請參見局部事務

行變更

rowChange 的類型為 RowUpdateChange,包含以下參數。

名稱

類型

說明

tableName(必選)

String

資料表名稱。

primaryKey(必選)

PrimaryKey

行主鍵。必須包含資料表的全部主鍵列,且列名稱、順序和類型必須與資料表的主鍵結構一致。主鍵列支援 STRINGINTEGERBINARY 類型。

columnsToUpdate(必選)

List<Pair<Column, RowUpdateChange.Type>>

屬性列變更列表。通過 putdeleteColumndeleteColumnsincrement 添加變更。

condition(可選)

Condition

更新條件,預設不檢查行是否存在。

關於條件的配置方法,請參見條件更新

returnType(可選)

ReturnType

傳回型別。預設值為 RT_NONE;原子計數器情境可設定為 RT_AFTER_MODIFY,返回更新後的列值。

關於原子計數器的配置方法,請參見原子計數器

returnColumnNames(可選)

Set<String>

要返回更新後值的屬性列名稱。僅用於原子計數器情境。

屬性列變更方法

通過以下方法向 columnsToUpdate 添加屬性列變更。

  • put:新增屬性列或寫入屬性列的新版本,可指定資料版本號碼。

  • deleteColumn:刪除屬性列的指定版本。

  • deleteColumns:刪除屬性列的全部版本。

  • increment:對 INTEGER 類型屬性列執行原子加操作。

傳回值

UpdateRowResponse 包含以下業務欄位。

欄位

類型

說明

row

Row

更新後的屬性列,通過 getRow 擷取。僅當 returnType 設定為 RT_AFTER_MODIFY 時返回。

情境樣本

寫入指定版本號碼的屬性列

通過 put 的第三個參數指定屬性列的資料版本號碼(毫秒時間戳記),適用於按業務時間歸檔歷史值的情境。

String tableName = "update_row_demo";

PrimaryKeyBuilder primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
primaryKeyBuilder.addPrimaryKeyColumn("id", PrimaryKeyValue.fromString("row1"));
PrimaryKey primaryKey = primaryKeyBuilder.build();

RowUpdateChange rowUpdateChange = new RowUpdateChange(tableName, primaryKey);
// 第三個參數指定資料版本號碼(毫秒時間戳記)
long version = System.currentTimeMillis();
rowUpdateChange.put("col2", ColumnValue.fromString("val2"), version);

client.updateRow(new UpdateRowRequest(rowUpdateChange));

刪除屬性列指定版本

通過 deleteColumn 刪除指定版本號碼的列資料,其他版本保留。

String tableName = "update_row_demo";

PrimaryKeyBuilder primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
primaryKeyBuilder.addPrimaryKeyColumn("id", PrimaryKeyValue.fromString("row1"));
PrimaryKey primaryKey = primaryKeyBuilder.build();

RowUpdateChange rowUpdateChange = new RowUpdateChange(tableName, primaryKey);
// 刪除 col2 列指定版本號碼(毫秒時間戳記)的資料
rowUpdateChange.deleteColumn("col2", 1747893563831L);

client.updateRow(new UpdateRowRequest(rowUpdateChange));

刪除整個屬性列

通過 deleteColumns 刪除屬性列的所有版本資料。

String tableName = "update_row_demo";

PrimaryKeyBuilder primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
primaryKeyBuilder.addPrimaryKeyColumn("id", PrimaryKeyValue.fromString("row1"));
PrimaryKey primaryKey = primaryKeyBuilder.build();

RowUpdateChange rowUpdateChange = new RowUpdateChange(tableName, primaryKey);
// 刪除整個 col2 屬性列(所有版本)
rowUpdateChange.deleteColumns("col2");

client.updateRow(new UpdateRowRequest(rowUpdateChange));