SQL 言語は、データを変更するための UPDATE
ステートメントを提供します。Amazon DynamoDB は、この UpdateItem
オペレーションを使用して同様のタスクを実行します。
SQL を使用してテーブルのデータを変更する
SQL では、UPDATE
ステートメントを使用して、1 つ以上の行を変更します。SET
句は、1 つ以上の行に新しい値を指定し、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 では、UpdateItem
オペレーションを使用して、単一の項目を変更します。
{ TableName: "Music", Key: { "Artist":"No One You Know", "SongTitle":"Call Me Today" }, UpdateExpression: "SET RecordLabel = :label", ExpressionAttributeValues: { ":label": "Global Records" } }
属性値を指定するには、変更する項目の Key
属性および UpdateExpression
を指定する必要があります。UpdateItem
は、「アップサート」オペレーションのように動作します。テーブルに項目が存在する場合は更新され、存在しない場合は新しい項目が追加 (挿入) されます。
UpdateItem
は、条件付き書き込みをサポートしており、特定の ConditionExpression
が true と評価された場合のみ、オペレーションが成功します。たとえば、次の UpdateItem
オペレーションは、曲の価格が 2.00 以上でない限り、更新を実行しません。
{ 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 データベースのシーケンスジェネレーター、IDENTITY 列、または自動インクリメントフィールドと似ています。
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" }