全部产品
Search
文档中心

表格存储:更新单行数据

更新时间:Aug 05, 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));