

# 关系（SQL）数据库和 DynamoDB 在从表中删除数据方面的差异
<a name="SQLtoNoSQL.DeleteData"></a>

在 SQL 中，`DELETE` 语句从表检索一个或多个行。Amazon DynamoDB 使用 `DeleteItem` 操作一次删除一个项目。

**Topics**
+ [使用 SQL 删除表中的数据](#SQLtoNoSQL.DeleteData.SQL)
+ [在 DynamoDB 中删除表中的数据](#SQLtoNoSQL.DeleteData.DynamoDB)

## 使用 SQL 删除表中的数据
<a name="SQLtoNoSQL.DeleteData.SQL"></a>

在 SQL 中，可使用 `DELETE` 语句删除一个或多个行。`WHERE` 子句确定要修改的行。示例如下：

```
DELETE FROM Music
WHERE Artist = 'The Acme Band' AND SongTitle = 'Look Out, World';
```

您可以修改 `WHERE` 子句以删除多个行。例如，您可以删除某个特定艺术家的所有歌曲，如以下示例所示。

```
DELETE FROM Music WHERE Artist = 'The Acme Band'
```

## 在 DynamoDB 中删除表中的数据
<a name="SQLtoNoSQL.DeleteData.DynamoDB"></a>

在 DynamoDB 中，您可以使用 DynamoDB API 或 [PartiQL](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/ql-reference.html)（一种与 SQL 兼容的查询语言）删除单个项目。（如果要修改多个项目，则必须使用多个操作。）

------
#### [ DynamoDB API ]

借助 DynamoDB API，您可以使用 `DeleteItem` 操作删除表中的数据（一次删除一个项目）。您必须指定项目的主键值。

```
{
    TableName: "Music",
    Key: {
        Artist: "The Acme Band",
        SongTitle: "Look Out, World"
    }
}
```

**注意**  
除了 `DeleteItem` 之外，Amazon DynamoDB 还支持使用 `BatchWriteItem` 操作同时删除多个项目。

`DeleteItem` 支持*条件写入*，在此情况下，操作仅在特定 `ConditionExpression` 的计算结果为 true 时成功完成。例如，以下 `DeleteItem` 操作仅在项目具有 *RecordLabel* 属性时删除项目。

```
{
    TableName: "Music",
    Key: {
        Artist: "The Acme Band",
        SongTitle: "Look Out, World"
    },
   ConditionExpression: "attribute_exists(RecordLabel)"
}
```

------
#### [ PartiQL for DynamoDB ]

使用 PartiQL，您可以使用 `Delete` 语句通过 `ExecuteStatement` 操作删除表中的数据（一次删除一个项目）。您必须指定项目的主键值。

此表的主键包含 *Artist* 和 *SongTitle*。您必须为这些属性指定值。

```
DELETE FROM Music
WHERE Artist = 'Acme Band' AND SongTitle = 'PartiQL Rocks'
```

您还可以指定操作的其他选项。以下 `DELETE` 操作只有在项目超过 11 个*奖项*时才会删除该项目。

```
DELETE FROM Music
WHERE Artist = 'Acme Band' AND SongTitle = 'PartiQL Rocks' AND Awards > 11
```

**注意**  
有关使用 `DELETE` 和 `ExecuteStatement` 的代码示例，请参阅 [PartiQL for DynamoDB Delete 语句](ql-reference.delete.md)。

------