全部產品
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

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

columnsToUpdate(必選)

List<Pair<Column, RowUpdateChange.Type>>

屬性列變更列表。通過 put、deleteColumn、deleteColumns 或 increment 添加變更。

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));