Thanks to visit codestin.com
Credit goes to docs.aws.amazon.com

Codestin Search App

テーブル内のデータを変更するときのリレーショナル (SQL) データベースと DynamoDB の相違点

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

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" }
PartiQL for DynamoDB

PartiQL では、Update ステートメントを利用する ExecuteStatement オペレーションを使用して、テーブル内の項目を変更します。

このテーブルのプライマリキーは、Artist および SongTitle で構成されます。これらの属性の値を指定する必要があります。

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 データベースのシーケンスジェネレーター、IDENTITY 列、または自動インクリメントフィールドと似ています。

次は、曲が再生された回数を追跡するための新しい属性 (Plays) を初期化する Update ステートメントの例です。

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 を使用したコード例については、DynamoDB 用の PartiQL 更新ステートメント を参照してください。