修改資料表中的資料時,關聯式 (SQL) 資料庫與 DynamoDB 之間的差異 - Amazon DynamoDB

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

修改資料表中的資料時,關聯式 (SQL) 資料庫與 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 操作將 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,您可以使用 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資料庫中的產生器、身分資料欄或自動遞增欄位。

以下為 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 的程式碼範例,請參閱 適用於 DynamoDB 的 PartiQL Update 陳述式