修改表中的数据 - Amazon DynamoDB

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

修改表中的数据

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 中,您可以使用 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 属性和 UpdateExpression 才能指定属性值。UpdateItem 行为类似于“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 操作来将播放次数增加 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 和 AWS SDK 入门

PartiQL for DynamoDB

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

此表的主键由 Art istSongTitle. 您必须为这些属性指定值。

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 语句