通过 SQL 更新数据

更新时间:
复制 MD 格式

通过 Java SDK 执行 UPDATE 语句,更新未开启局部事务功能的数据表中的单行数据。

前提条件

  • 安装Tablestore Java SDK并初始化客户端。

  • 使用 5.17.11 及以上版本的 Tablestore Java SDK。

  • 已为待更新的数据表创建映射关系,且数据表未开启局部事务功能。

  • 使用 RAM 用户时,已授予 SQL_DML 权限。

功能说明

调用 sqlQuery 方法执行 UPDATE 语句,更新一行数据的一个或多个属性列。WHERE 子句必须使用等值条件指定全部主键列,且不能更新主键列。

SQLQueryResponse sqlQuery(SQLQueryRequest request)

以下示例更新 example_table 数据表中主键值为 1row1 的一行数据。

String query = "UPDATE example_table SET name = 'updated' "
        + "WHERE tenant_id = 1 AND pk = 'row1'";
SQLQueryRequest request = new SQLQueryRequest(query);

SQLQueryResponse response = client.sqlQuery(request);
System.out.println("Affected rows: " + response.getAffectedRows());

参数说明

SQLQueryRequest 包含以下参数。

名称

类型

说明

query(必选)

String

要执行的 UPDATE 语句。SET 子句指定待更新的属性列和列值,WHERE 子句使用等值条件指定全部主键列。

返回值

SQLQueryResponse 包含以下与更新结果相关的字段。

字段

类型

说明

affectedRows

long

通过 getAffectedRows() 获取成功更新的行数。

consumedCapacityByTable

Map<String, ConsumedCapacity>

通过 getConsumedCapacity() 获取各数据表消耗的读写 CU。服务端校验待更新数据时消耗读 CU,更新数据时消耗写 CU。

type

SQLStatementType

通过 getSQLStatementType() 获取 SQL 语句类型。执行 UPDATE 语句时返回 SQL_UPDATE

场景示例

原子递增或递减整数值

SET 子句中使用 属性列 = 属性列 + 整数属性列 = 属性列 - 整数,可以原子递增或递减整数类型的属性列。以下示例将 score 列的值原子增加 5。

String query = "UPDATE example_table SET score = score + 5 "
        + "WHERE tenant_id = 1 AND pk = 'row1'";
SQLQueryRequest request = new SQLQueryRequest(query);

SQLQueryResponse response = client.sqlQuery(request);
System.out.println("Affected rows: " + response.getAffectedRows());