使用 UPDATE
语句来修改 Amazon DynamoDB 表中某个项目中一个或多个属性的值。
注意
一次只能更新一个项目;不能发出单个 DynamoDB PartiQL 语句更新多个项目。有关更新多个项目的信息,请参阅 使用 PartiQL for DynamoDB 执行事务 或 对 PartiQL for DynamoDB 运行批处理操作。
语法
UPDATE
table
[SET | REMOVE]path
[=data
] […] WHEREcondition
[RETURNINGreturnvalues
] <returnvalues> ::= [ALL OLD | MODIFIED OLD | ALL NEW | MODIFIED NEW] *
参数
table
-
(必需)包含要修改的数据的表。
path
-
(必需)要创建或修改的属性名称或文档路径。
data
-
(必需)属性值或操作的结果。
要与 SET 一起使用的支持操作:
-
LIST_APPEND:向列表类型添加一个值。
-
SET_ADD:将值添加到数字或字符串集。
-
SET_DELETE:从数字或字符串集中删除值。
-
condition
-
(必需)要修改的项目的选择条件。此条件必须解析为单个主键值。
returnvalues
-
(可选)如果希望获取更新之前或之后显示的项目属性,使用
returnvalues
。有效值为:-
ALL OLD *
- 返回更新操作前项目的所有属性。 -
MODIFIED OLD *
- 仅返回更新操作前已更新的属性。 -
ALL NEW *
- 返回更新操作后显示的项目的所有属性。 -
MODIFIED NEW *
- 仅返回UpdateItem
操作后已更新的属性。
-
返回值
此语句不返回值,除非指定 returnvalues
参数。
注意
如果对于 DynamoDB 表中的任何项目,UPDATE 语句的 WHERE 子句计算结果不为 true,则返回 ConditionalCheckFailedException
。
示例
更新现有项目的属性值。如果属性不存在,则创建该属性。
下面的查询添加一个 number 类型参数 (AwardsWon
) 和一个 map 类型参数 (AwardDetail
),更新 "Music"
表的项目。
UPDATE "Music"
SET AwardsWon=1
SET AwardDetail={'Grammys':[2020, 2018]}
WHERE Artist='Acme Band' AND SongTitle='PartiQL Rocks'
您可以添加 RETURNING ALL OLD *
以返回在 Update
操作之前显示的属性。
UPDATE "Music"
SET AwardsWon=1
SET AwardDetail={'Grammys':[2020, 2018]}
WHERE Artist='Acme Band' AND SongTitle='PartiQL Rocks'
RETURNING ALL OLD *
这将返回以下内容:
{
"Items": [
{
"Artist": {
"S": "Acme Band"
},
"SongTitle": {
"S": "PartiQL Rocks"
}
}
]
}
您可以添加 RETURNING ALL NEW *
以返回在 Update
操作之后显示的属性。
UPDATE "Music"
SET AwardsWon=1
SET AwardDetail={'Grammys':[2020, 2018]}
WHERE Artist='Acme Band' AND SongTitle='PartiQL Rocks'
RETURNING ALL NEW *
这将返回以下内容:
{
"Items": [
{
"AwardDetail": {
"M": {
"Grammys": {
"L": [
{
"N": "2020"
},
{
"N": "2018"
}
]
}
}
},
"AwardsWon": {
"N": "1"
}
}
]
}
以下查询通过附加到列表 AwardDetail.Grammys
,更新 "Music"
表中的项目。
UPDATE "Music"
SET AwardDetail.Grammys =list_append(AwardDetail.Grammys,[2016])
WHERE Artist='Acme Band' AND SongTitle='PartiQL Rocks'
以下查询通过从列表 AwardDetail.Grammys
移除,更新 "Music"
表中的项目。
UPDATE "Music"
REMOVE AwardDetail.Grammys[2]
WHERE Artist='Acme Band' AND SongTitle='PartiQL Rocks'
以下查询通过将 BillBoard
添加到映射 AwardDetail
,更新 "Music"
表中的项目。
UPDATE "Music"
SET AwardDetail.BillBoard=[2020]
WHERE Artist='Acme Band' AND SongTitle='PartiQL Rocks'
以下查询添加字符串集属性 BandMembers
,更新 "Music"
表中的项目。
UPDATE "Music"
SET BandMembers =<<'member1', 'member2'>>
WHERE Artist='Acme Band' AND SongTitle='PartiQL Rocks'
以下查询将 newbandmember
添加到字符串集 BandMembers
,更新 "Music"
表中的项目。
UPDATE "Music"
SET BandMembers =set_add(BandMembers, <<'newbandmember'>>)
WHERE Artist='Acme Band' AND SongTitle='PartiQL Rocks'