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

テーブル内のデータを変更するときのリレーショナル (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 更新ステートメント を参照してください。