修改表中的数据 - Amazon DynamoDB
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

修改表中的数据

SQL 语言提供 UPDATE 语句来修改数据。Amazon DynamoDB 使用 UpdateItem 操作来完成类似的任务。

SQL

在 SQL 中,可使用 UPDATE 语句修改一个或多个行。SET 子句为一个或多个列指定新值,WHERE 子句确定修改的行。以下是示例。

UPDATE Music SET RecordLabel = 'Global Records' WHERE Artist = 'No One You Know' AND SongTitle = 'Call Me Today';

如果任何行均不匹配 WHERE 子句,则 UPDATE 语句不起作用。

DynamoDB

在 DynamoDB 中,您可以使用经典 API 或 PartiQL(一种与 SQL 兼容的查询语言)修改单个项目。(如果要修改多个项目,则必须使用多个 操作。)

DynamoDB API

借助 DynamoDB API,您可以使用 UpdateItem 操作修改单个项目。

{ TableName: "Music", Key: { "Artist":"No One You Know", "SongTitle":"Call Me Today" }, UpdateExpression: "SET RecordLabel = :label", ExpressionAttributeValues: { ":label": "Global Records" } }

您必须指定要修改的项目的 Key 属性和一个用于指定属性值的 UpdateExpressionUpdateItem 的行为与“upsert”操作的行为类似:如果项目位于表中,则更新项目,否则添加(插入)新项目。

UpdateItem 支持条件写入,在此情况下,操作仅在特定 ConditionExpression 的计算结果为 true 时成功完成。例如,除非歌曲的价格大于或等于 2.00,否则以下 UpdateItem 操作不会执行更新。

{ TableName: "Music", Key: { "Artist":"No One You Know", "SongTitle":"Call Me Today" }, UpdateExpression: "SET RecordLabel = :label", ConditionExpression: "Price >= :p", ExpressionAttributeValues: { ":label": "Global Records", ":p": 2.00 } }

UpdateItem 还支持原子计数器 或类型为 Number 的属性(可递增或递减)。原子计数器在很多方面都类似于 SQL 数据库中的顺序生成器、身份列或自递增字段。

以下是一个 UpdateItem 操作的示例,它初始化一个新属性 (Plays) 来跟踪歌曲的已播放次数。

{ TableName: "Music", Key: { "Artist":"No One You Know", "SongTitle":"Call Me Today" }, UpdateExpression: "SET Plays = :val", ExpressionAttributeValues: { ":val": 0 }, ReturnValues: "UPDATED_NEW" }

ReturnValues 参数设置为 UPDATED_NEW,这将返回已更新的任何属性的新值。在此示例中,它返回 0 (零)。

当某人播放此歌曲时,可使用以下 UpdateItem 操作来将 Plays 增加 1。

{ TableName: "Music", Key: { "Artist":"No One You Know", "SongTitle":"Call Me Today" }, UpdateExpression: "SET Plays = Plays + :incr", ExpressionAttributeValues: { ":incr": 1 }, ReturnValues: "UPDATED_NEW" }
注意

有关使用 UpdateItem 的代码示例,请参阅 DynamoDB 和 Amazon SDK 入门

PartiQL for DynamoDB

使用 PartiQL,您可以通过使用 PartiQL ExecuteStatement 语句来使用 Update 操作修改表中的项目。

此表的主键包含 ArtistSongTitle。您必须为这些属性指定值。

UPDATE Music SET RecordLabel ='Global Records' WHERE Artist='No One You Know' AND SongTitle='Call Me Today'

如下例所示,您还可以一次修改多个字段。

UPDATE Music SET RecordLabel = 'Global Records' SET AwardsWon = 10 WHERE Artist ='No One You Know' AND SongTitle='Call Me Today'

Update 还支持原子计数器 或类型为 Number 的属性(可递增或递减)。原子计数器在很多方面都类似于 SQL 数据库中的顺序生成器、身份列或自递增字段。

以下是一个 Update 语句的示例,它初始化一个新属性 (Plays) 来跟踪歌曲的已播放次数。

UPDATE Music SET Plays = 0 WHERE Artist='No One You Know' AND SongTitle='Call Me Today'

当某人播放此歌曲时,可使用以下 Update 语句来将 Plays 增加 1。

UPDATE Music SET Plays = Plays + 1 WHERE Artist='No One You Know' AND SongTitle='Call Me Today'
注意

有关使用 UpdateExecuteStatement 的代码示例,请参阅 PartiQL for DynamoDB Update 语句