

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# Amazon QLDB 中的 PartiQL 命令
<a name="ql-reference.statements"></a>

**重要**  
终止支持通知：现有客户将能够使用 Amazon QLDB，直到 2025 年 7 月 31 日终止支持。有关更多详细信息，请参阅[将亚马逊 QLDB 账本迁移到亚马逊 Aurora PostgreSQL](https://aws.amazon.com/blogs/database/migrate-an-amazon-qldb-ledger-to-amazon-aurora-postgresql/)。

PartiQL 扩展了 SQL-92 以支持 Amazon Ion 数据格式的文档。Amazon QLDB 支持以下 PartiQL 命令。

要了解如何控制特定表运行每个 PartiQL 命令的访问权限，请参阅[请参阅《Amazon QLDB 开发人员》中的标准权限模式入门](getting-started-standard-mode.md)。

**注意**  
QLDB 不支持所有 PartiQL 命令。
QLDB 中的所有 PartiQL 语句都受事务限制的约束，如[Amazon QLDB 资源中的限额和限制](limits.md#limits.fixed)中所定义。
本参考资料提供了在 QLDB 控制台或 QLDB Shell 上手动运行的 PartiQL 语句的基本语法和用法示例。有关演示如何使用受支持的编程语言运行类似语句的代码示例，请参阅[驱动程序入门](getting-started-driver.md)中的教程。

## DDL 语句（数据定义语言）
<a name="ql-functions.statements.ddl"></a>

*数据定义语言*（DDL）是一组用于管理数据库对象（如表和索引）的 PartiQL 语句。您可以使用 DDL 创建和删除这些对象。
+ [CREATE INDEX](ql-reference.create-index.md)
+ [CREATE TABLE](ql-reference.create-table.md)
+ [DROP INDEX](ql-reference.drop-index.md)
+ [DROP TABLE](ql-reference.drop-table.md)
+ [取消删除表](ql-reference.undrop-table.md)

## DML（数据操作语言）语句
<a name="ql-functions.statements.dml"></a>

*数据操作语言*（DML）是一组用于管理 QLDB 表中的数据的 PartiQL 语句。可以使用 DML 语句在表中添加、修改或删除数据。

支持以下 DML 和查询语言语句：
+ [DELETE](ql-reference.delete.md)
+ [FROM（插入、删除或设置）](ql-reference.from.md)
+ [INSERT](ql-reference.insert.md)
+ [SELECT](ql-reference.select.md)
+ [UPDATE](ql-reference.update.md)

# 在 Amazon QLDB 中创建索引命令
<a name="ql-reference.create-index"></a>

**重要**  
终止支持通知：现有客户将能够使用 Amazon QLDB，直到 2025 年 7 月 31 日终止支持。有关更多详细信息，请参阅[将亚马逊 QLDB 账本迁移到亚马逊 Aurora PostgreSQL](https://aws.amazon.com/blogs/database/migrate-an-amazon-qldb-ledger-to-amazon-aurora-postgresql/)。

在 Amazon QLDB 中，使用`CREATE INDEX`命令为表中的文档字段创建索引。

要了解如何控制对特定表运行此 PartiQL 命令的访问权限，请参阅[请参阅《Amazon QLDB 开发人员》中的标准权限模式入门](getting-started-standard-mode.md)。

**重要**  
QLDB 需要索引才能高效查找文档。如果没有索引，QLDB 在读取文档时需进行全表扫描。这可能会导致大型表出现性能问题，包括并发冲突与事务超时。  
为避免表扫描，必须在索引字段或文档 ID 上使用*相等*运算符（`=`或`IN`）运行带有`WHERE`谓词子句的语句。有关更多信息，请参阅 [优化查询性能](working.optimize.md)。

创建索引时应注意以下限制：
+ 只能在单个顶级字段创建索引。不支持复合索引、嵌套索引、唯一索引以及基于函数的索引。
+ 您可以为任何 [Ion 数据类型](ql-reference.data-types.md)创建索引，其中包括 `list` 和 `struct`。但是，无论 Ion 类型如何，您都只能通过整个 Ion 值进行索引查找。例如，使用 `list` 类型作为索引时，不能按列表中的一个项目进行索引查找。
+ 只有使用相等谓词时，查询性能才会得到改善；例如`WHERE indexedField = 123` 或 `WHERE indexedField IN (456, 789)`。

  QLDB 不支持查询谓词不等式。因此，未实施范围过滤扫描。
+ 索引字段名称区分大小写，且最大长度可为 128 个字符。
+ 在 QLDB 中创建索引具有异步特点。非空表上完成索引所需的时间取决于表的大小。有关更多信息，请参阅 [管理索引](working.manage-indexes.md)。

**Topics**
+ [语法](#ql-reference.create-index.syntax)
+ [参数](#ql-reference.create-index.parameters)
+ [返回值](#ql-reference.create-index.return)
+ [示例](#ql-reference.create-index.examples)
+ [使用驱动程序以编程方式运行](#ql-reference.create-index.driver)

## 语法
<a name="ql-reference.create-index.syntax"></a>

```
CREATE INDEX ON table_name (field)
```

## 参数
<a name="ql-reference.create-index.parameters"></a>

***table\$1name***  
要在其中创建索引的表的名称。表必须已经存在。  
表名称区分大小写。

***field***  
要为其创建索引的文档字段的名称。该字段必须为顶级属性。  
索引字段名称区分大小写，且最大长度可为 128 个字符。  
您可以为任何 [Amazon Ion 数据类型](ql-reference.data-types.md)创建索引，包括 `list` 和 `struct`。但是，无论 Ion 类型如何，您都只能通过整个 Ion 值进行索引查找。例如，使用 `list` 类型作为索引时，不能按列表中的一个项目进行索引查找。

## 返回值
<a name="ql-reference.create-index.return"></a>

`tableId` — 您在其上创建索引的表的唯一 ID。

## 示例
<a name="ql-reference.create-index.examples"></a>

```
CREATE INDEX ON VehicleRegistration (LicensePlateNumber)
```

```
CREATE INDEX ON Vehicle (VIN)
```

## 使用驱动程序以编程方式运行
<a name="ql-reference.create-index.driver"></a>

要了解如何使用 QLDB 驱动程序以编程方式运行此语句，请参阅*驱动程序入门*中的以下教程：
+ Java: [快速入门教程](driver-quickstart-java.md) \$1 [说明书参考](driver-cookbook-java.md)
+ .NET: [快速入门教程](driver-quickstart-dotnet.md) \$1 [说明书参考](driver-cookbook-dotnet.md)
+ Go: [快速入门教程](driver-quickstart-golang.md) \$1 [说明书参考](driver-cookbook-golang.md)
+ Node.js: [快速入门教程](driver-quickstart-nodejs.md) \$1 [说明书参考](driver-cookbook-nodejs.md)
+ Python: [快速入门教程](driver-quickstart-python.md) \$1 [说明书参考](driver-cookbook-python.md)

# Amazon QLDB 中的 CREATE TABLE 命令
<a name="ql-reference.create-table"></a>

**重要**  
终止支持通知：现有客户将能够使用 Amazon QLDB，直到 2025 年 7 月 31 日终止支持。有关更多详细信息，请参阅[将亚马逊 QLDB 账本迁移到亚马逊 Aurora PostgreSQL](https://aws.amazon.com/blogs/database/migrate-an-amazon-qldb-ledger-to-amazon-aurora-postgresql/)。

在 Amazon QLDB 中使用 `CREATE TABLE`命令创建新表。

表名称很简单，没有命名空间。QLDB 支持开放内容且不强制架构，因此在创建表时不需要定义属性或数据类型。

**注意**  
要了解如何控制在分类账中运行此 PartiQL 命令的访问权限，请参阅[请参阅《Amazon QLDB 开发人员》中的标准权限模式入门](getting-started-standard-mode.md)。

**Topics**
+ [语法](#ql-reference.create-table.syntax)
+ [参数](#ql-reference.create-table.parameters)
+ [返回值](#ql-reference.create-table.return)
+ [创建标记表](#ql-reference.create-table.tagging)
+ [示例](#ql-reference.create-table.examples)
+ [使用驱动程序以编程方式运行](#ql-reference.create-table.driver)

## 语法
<a name="ql-reference.create-table.syntax"></a>

```
CREATE TABLE table_name [ WITH (aws_tags = `{'key': 'value'}`) ]
```

## 参数
<a name="ql-reference.create-table.parameters"></a>

***table\$1name***  
要创建的表的唯一名称。不得存在同名活动表。以下是命名约定：  
+ 只能包含 1-128 个字母数字字符或下划线字符。
+ 必须为首个字样或下划线。
+ 其余字符可能是字母数字字符和下划线的任意组合。
+ 区分大小写。
+ 不能是 QLDB PartiQL 的 [保留字](ql-reference.reserved.md)。

**'*key*': '*value*'**  
（可选）在创建表资源时要附加至表资源的标签。每个标签都定义为键值对，其中键和值均以单引号表示。每个键值对都在用反引号表示的 Amazon Ion 结构中定义。  
*目前，只有 `STANDARD` 权限模式分类账支持在创建时对表格进行标记。*

## 返回值
<a name="ql-reference.create-table.return"></a>

`tableId` - 您创建的表的唯一 ID。

## 创建标记表
<a name="ql-reference.create-table.tagging"></a>

**注意**  
 只有 `STANDARD` 权限模式分类账支持在创建时对表格进行标记。

或者，您可以通过`CREATE TABLE`语句中指定标签来标记表资源。有关标签的更多信息，请参阅 [为 Amazon QLDB 资源贴标签](tagging.md)。下面的示例创建了一个名为 `Vehicle` 的表，带有标签 `environment=production`。

```
CREATE TABLE Vehicle WITH (aws_tags = `{'environment': 'production'}`)
```

在创建时为表添加标签，需要同时访问 `qldb:PartiQLCreateTable` 和 `qldb:TagResource` 操作。要了解有关 QLDB 资源权限的更多信息，请参阅[Amazon MQ 如何与 IAM 协同工作](security_iam_service-with-iam.md)。

通过在创建资源时对其进行标记，无需在创建资源后运行自定义标记脚本。标记表后，您可根据这些标签来控制对表的访问。例如：您只能向具有特定标签的表授予完全访问权限。有关 JSON 策略示例，请参阅[基于表格标签对所有操作的完全访问权限](security_iam_id-based-policy-examples.md#security_iam_id-based-policy-examples-full-tags)。

## 示例
<a name="ql-reference.create-table.examples"></a>

```
CREATE TABLE VehicleRegistration
```

```
CREATE TABLE Vehicle WITH (aws_tags = `{'environment': 'development'}`)
```

```
CREATE TABLE Vehicle WITH (aws_tags = `{'key1': 'value1', 'key2': 'value2'}`)
```

## 使用驱动程序以编程方式运行
<a name="ql-reference.create-table.driver"></a>

要了解如何使用 QLDB 驱动程序以编程方式运行此语句，请参阅*驱动程序入门*中的以下教程：
+ Java: [快速入门教程](driver-quickstart-java.md) \$1 [说明书参考](driver-cookbook-java.md)
+ .NET: [快速入门教程](driver-quickstart-dotnet.md) \$1 [说明书参考](driver-cookbook-dotnet.md)
+ Go: [快速入门教程](driver-quickstart-golang.md) \$1 [说明书参考](driver-cookbook-golang.md)
+ Node.js: [快速入门教程](driver-quickstart-nodejs.md) \$1 [说明书参考](driver-cookbook-nodejs.md)
+ Python: [快速入门教程](driver-quickstart-python.md) \$1 [说明书参考](driver-cookbook-python.md)

# Amazon QLDB 中的删除命令
<a name="ql-reference.delete"></a>

**重要**  
终止支持通知：现有客户将能够使用 Amazon QLDB，直到 2025 年 7 月 31 日终止支持。有关更多详细信息，请参阅[将亚马逊 QLDB 账本迁移到亚马逊 Aurora PostgreSQL](https://aws.amazon.com/blogs/database/migrate-an-amazon-qldb-ledger-to-amazon-aurora-postgresql/)。

在 Amazon QLDB 中，通过创建新的但最终版本的文档，使用`DELETE`命令将表中的活动文档标记为已删除。此最终修订版表示此文档已被删除。此操作会结束文档生命周期，这意味着无法再创建具有相同文档 ID 的文档修订版。

该操作不可逆。您仍然可以使用[历史记录函数](working.history.md#working.history.function)查询已删除文档的修订历史记录。

**注意**  
要了解如何控制对特定表上运行此 PartiQL 命令的访问权限，请参阅[请参阅《Amazon QLDB 开发人员》中的标准权限模式入门](getting-started-standard-mode.md)。

**Topics**
+ [语法](#ql-reference.delete.syntax)
+ [参数](#ql-reference.delete.parameters)
+ [返回值](#ql-reference.delete.return)
+ [示例](#ql-reference.delete.examples)
+ [使用驱动程序以编程方式运行](#ql-reference.delete.driver)

## 语法
<a name="ql-reference.delete.syntax"></a>

```
DELETE FROM table_name [ AS table_alias ] [ BY id_alias ]
[ WHERE condition ]
```

## 参数
<a name="ql-reference.delete.parameters"></a>

***table\$1name***  
包含要删除数据的用户表的名称。仅默认[用户视图](working.userdata.md)支持 DML 语句。每条语句只能在单个表中运行。

**正如 *table\$1alias***  
（可选）用户定义的别名，范围涵盖要从中删除的表。`AS` 关键字是可选的。

**由 *id\$1alias***  
（可选）用户定义的别名，它绑定至结果集中每个文档的 `id`元数据字段。必须使用 `BY` 关键字在 `FROM` 子句中声明别名。当您想在查询默认用户视图的同时筛选[文档 ID](working.metadata.md)，这很有用。有关更多信息，请参阅 [通过 BY 子句查询文档 ID](working.metadata.by-clause.md)。

**哪里 *condition***  
待删除文档的选择条件。

**注意**  
如果省略 `WHERE` 子句，则表中的所有文档都被删除。

## 返回值
<a name="ql-reference.delete.return"></a>

`documentId` — 您删除的每个文档的唯一 ID。

## 示例
<a name="ql-reference.delete.examples"></a>

```
DELETE FROM VehicleRegistration AS r
WHERE r.VIN = '1HVBBAANXWH544237'
```

## 使用驱动程序以编程方式运行
<a name="ql-reference.delete.driver"></a>

要了解如何使用 QLDB 驱动程序以编程方式运行此语句，请参阅*驱动程序入门*中的以下教程：
+ Java: [快速入门教程](driver-quickstart-java.md) \$1 [说明书参考](driver-cookbook-java.md)
+ .NET: [快速入门教程](driver-quickstart-dotnet.md) \$1 [说明书参考](driver-cookbook-dotnet.md)
+ Go: [快速入门教程](driver-quickstart-golang.md) \$1 [说明书参考](driver-cookbook-golang.md)
+ Node.js: [快速入门教程](driver-quickstart-nodejs.md) \$1 [说明书参考](driver-cookbook-nodejs.md)
+ Python: [快速入门教程](driver-quickstart-python.md) \$1 [说明书参考](driver-cookbook-python.md)

# Amazon QLDB 中的 DROP INDEX 命令
<a name="ql-reference.drop-index"></a>

**重要**  
终止支持通知：现有客户将能够使用 Amazon QLDB，直到 2025 年 7 月 31 日终止支持。有关更多详细信息，请参阅[将亚马逊 QLDB 账本迁移到亚马逊 Aurora PostgreSQL](https://aws.amazon.com/blogs/database/migrate-an-amazon-qldb-ledger-to-amazon-aurora-postgresql/)。

在 Amazon QLDB 中，使用`DROP INDEX`命令删除表上的索引。

**注意**  
要了解如何控制对特定表运行此 PartiQL 命令的访问权限，请参阅[请参阅《Amazon QLDB 开发人员》中的标准权限模式入门](getting-started-standard-mode.md)。

**Topics**
+ [语法](#ql-reference.drop-index.syntax)
+ [参数](#ql-reference.drop-index.parameters)
+ [返回值](#ql-reference.drop-index.return)
+ [示例](#ql-reference.drop-index.examples)

## 语法
<a name="ql-reference.drop-index.syntax"></a>

```
DROP INDEX "indexId" ON table_name WITH (purge = true)
```

**注意**  
该子句 `WITH (purge = true)` 是所有 `DROP INDEX` 语句所必需的，并且 `true` 是目前唯一支持的值。  
关键字`purge`区分大小写，并且必须为全小写。

## 参数
<a name="ql-reference.drop-index.parameters"></a>

**"*indexId*"**  
待索引的唯一 ID，用双引号表示。

**开启 *table\$1name***  
要删除索引的表名称。

## 返回值
<a name="ql-reference.drop-index.return"></a>

`tableId` - 您删除其索引的表的唯一 ID。

## 示例
<a name="ql-reference.drop-index.examples"></a>

```
DROP INDEX "4tPW3fUhaVhDinRgKRLhGU" ON VehicleRegistration WITH (purge = true)
```

# Amazon QLDB 中的 DROP TABLE 命令
<a name="ql-reference.drop-table"></a>

**重要**  
终止支持通知：现有客户将能够使用 Amazon QLDB，直到 2025 年 7 月 31 日终止支持。有关更多详细信息，请参阅[将亚马逊 QLDB 账本迁移到亚马逊 Aurora PostgreSQL](https://aws.amazon.com/blogs/database/migrate-an-amazon-qldb-ledger-to-amazon-aurora-postgresql/)。

在 Amazon QLDB 中，使用 `DROP TABLE` 命令停用现有表。您可以使用 [取消删除表](ql-reference.undrop-table.md) 语句将其重新激活。停用或重新激活表，不会影响其文档或索引。

**注意**  
要了解如何控制对特定表运行此 PartiQL 命令的访问权限，请参阅。[请参阅《Amazon QLDB 开发人员》中的标准权限模式入门](getting-started-standard-mode.md)

**Topics**
+ [语法](#ql-reference.drop-table.syntax)
+ [参数](#ql-reference.drop-table.parameters)
+ [返回值](#ql-reference.drop-table.return)
+ [示例](#ql-reference.drop-table.examples)

## 语法
<a name="ql-reference.drop-table.syntax"></a>

```
DROP TABLE table_name
```

## 参数
<a name="ql-reference.drop-table.parameters"></a>

***table\$1name***  
要休眠的表的名称。该表必须已存在且状态为 `ACTIVE`。

## 返回值
<a name="ql-reference.drop-table.return"></a>

`tableId` — 您停用表的唯一 ID。

## 示例
<a name="ql-reference.drop-table.examples"></a>

```
DROP TABLE VehicleRegistration
```

# Amazon QLDB 中的 FROM（插入、删除或设置）命令
<a name="ql-reference.from"></a>

**重要**  
终止支持通知：现有客户将能够使用 Amazon QLDB，直到 2025 年 7 月 31 日终止支持。有关更多详细信息，请参阅[将亚马逊 QLDB 账本迁移到亚马逊 Aurora PostgreSQL](https://aws.amazon.com/blogs/database/migrate-an-amazon-qldb-ledger-to-amazon-aurora-postgresql/)。

在 Amazon QLDB 中，以`FROM`开头的语句是 PartiQL 扩展，允许您在文档中插入和删除特定元素。您也可以使用此语句更新文档中的现有元素，类似于[UPDATE](ql-reference.update.md)命令。

**注意**  
要了解如何控制对特定表运行此 PartiQL 命令的访问权限，请参阅[请参阅《Amazon QLDB 开发人员》中的标准权限模式入门](getting-started-standard-mode.md)。

**Topics**
+ [语法](#ql-reference.from.syntax)
+ [参数](#ql-reference.from.parameters)
+ [嵌套集合](#ql-reference.from.nested-collections)
+ [返回值](#ql-reference.from.return)
+ [示例](#ql-reference.from.examples)
+ [使用驱动程序以编程方式运行](#ql-reference.from.driver)

## 语法
<a name="ql-reference.from.syntax"></a>

**FROM-INSERT**

在现有文档内插入新元素。要在表格中插入新顶级文档，必须使用[INSERT](ql-reference.insert.md)。

```
FROM table_name [ AS table_alias ] [ BY id_alias ]
[ WHERE condition ]
INSERT INTO element VALUE data [ AT key_name ]
```

**FROM-REMOVE**

移除文档中的现有元素，或者移除整个顶级文档。后者在语义上与传统 [DELETE](ql-reference.delete.md) 语法相同。

```
FROM table_name [ AS table_alias ] [ BY id_alias ]
[ WHERE condition ]
REMOVE element
```

**FROM-SET**

更新文档中的一项或多项元素。如元素不存在，则将其插入。这在语义上与传统 [UPDATE](ql-reference.update.md) 语法相同。

```
FROM table_name [ AS table_alias ] [ BY id_alias ]
[ WHERE condition ]
SET element = data [, element = data, ... ]
```

## 参数
<a name="ql-reference.from.parameters"></a>

***table\$1name***  
包含要修改数据的用户表的名称。仅默认[用户视图](working.userdata.md)支持 DML 语句。每条语句只能在单个表中运行。  
在此子句中，还可包含嵌套在指定表中的一个或多个集合。有关更多详细信息，请参阅 [嵌套集合](#ql-reference.from.nested-collections)。

**正如 *table\$1alias***  
（可选）用户定义的别名，其范围涵盖要修改的表。`SET`、`REMOVE`、`INSERT INTO` 或 `WHERE`语句中所用的表格别名必须在`FROM`语句中声明。`AS` 关键字是可选的。

**由 *id\$1alias***  
（可选）用户定义的别名，它绑定至结果集中每个文档的 `id`元数据字段。必须使用 `BY` 关键字在 `FROM` 子句中声明别名。当您想在查询默认用户视图的同时筛选[文档 ID](working.metadata.md)，这很有用。有关更多信息，请参阅 [通过 BY 子句查询文档 ID](working.metadata.by-clause.md)。

**哪里 *condition***  
（必需）要修改的文档的选择条件。  
如果省略 `WHERE` 子句，则表中的所有文档都被修改。

***element***  
待创建或修改的文档元素。

***data***  
元素新值。

**在 *key\$1name***  
在要修改的文档中添加的密钥名称。您必须指定相应的 `VALUE` 以及秘钥名称。这是在文档中的特定位置插入新 `AT` 值的必要条件。

## 嵌套集合
<a name="ql-reference.from.nested-collections"></a>

虽然只能对单个表运行 DML 语句，但可以将此表中文档中的嵌套集合指定为其他来源。您为嵌套集合声明的每个别名都可以在 `WHERE`子句和`SET`、`INSERT INTO`或`REMOVE`子句中使用。

例如，以下语句的`FROM` 来源包括 `VehicleRegistration` 表和嵌套 `Owners.SecondaryOwners` 结构。

```
FROM VehicleRegistration r, @r.Owners.SecondaryOwners o
WHERE r.VIN = '1N4AL11D75C109151' AND o.PersonId = 'abc123'
SET o.PersonId = 'def456'
```

此示例更新了特定`SecondaryOwners`列表元素，其中包含`'1N4AL11D75C109151'`中的`VIN`个`VehicleRegistration`文档中的`'abc123'` 的`PersonId`。此表达式允许您按其值而非其索引指定列表中的元素。

## 返回值
<a name="ql-reference.from.return"></a>

`documentId` — 您更新或删除的每个文档的唯一 ID。

## 示例
<a name="ql-reference.from.examples"></a>

修改文档中的一项元素。如果此元素不存在，则将其插入。

```
FROM Vehicle AS v
WHERE v.VIN = '1N4AL11D75C109151' AND v.Color = 'Silver'
SET v.Color = 'Shiny Gray'
```

修改或插入元素并筛选系统分配的文档`id`元数据字段。

```
FROM Vehicle AS v BY v_id
WHERE v_id = 'documentId'
SET v.Color = 'Shiny Gray'
```

修改文档中`Owners.SecondaryOwners`列表中*第一个*元素的`PersonId`字段。

```
FROM VehicleRegistration AS r
WHERE r.VIN = '1N4AL11D75C109151'
SET r.Owners.SecondaryOwners[0].PersonId = 'abc123'
```

移除文档中的现有元素。

```
FROM Person AS p
WHERE p.GovId = '111-22-3333'
REMOVE p.Address
```

从表格中删除整个文档。

```
FROM Person AS p
WHERE p.GovId = '111-22-3333'
REMOVE p
```

移除`VehicleRegistration`表格中文档中`Owners.SecondaryOwners`列表的*第一个*元素。

```
FROM VehicleRegistration AS r
WHERE r.VIN = '1N4AL11D75C109151'
REMOVE r.Owners.SecondaryOwners[0]
```

`{'Mileage':26500}`以顶级名称/值对的形式插入到表格中的文档中。`Vehicle`

```
FROM Vehicle AS v 
WHERE v.VIN = '1N4AL11D75C109151'
INSERT INTO v VALUE 26500 AT 'Mileage'
```

`{'PersonId':'abc123'}`以名称/值对的形式附加至`VehicleRegistration`表格中`Owners.SecondaryOwners`文档的字段中。请注意，语句`Owners.SecondaryOwners`必须已经存在且必须是列表数据类型才会生效。否则，`INSERT INTO`子句中必须使用关键字`AT`。

```
FROM VehicleRegistration AS r 
WHERE r.VIN = '1N4AL11D75C109151'
INSERT INTO r.Owners.SecondaryOwners VALUE { 'PersonId' : 'abc123' }
```

将`{'PersonId':'abc123'}`以文档现有`Owners.SecondaryOwners`列表中的*首个*元素插入。

```
FROM VehicleRegistration AS r 
WHERE r.VIN = '1N4AL11D75C109151'
INSERT INTO r.Owners.SecondaryOwners VALUE {'PersonId' : 'abc123'} AT 0
```

将多个名称/值对附加到文档中的现有`Owners.SecondaryOwners`列表中。

```
FROM VehicleRegistration AS r 
WHERE r.VIN = '1N4AL11D75C109151'
INSERT INTO r.Owners.SecondaryOwners << {'PersonId' : 'abc123'}, {'PersonId' : 'def456'} >>
```

## 使用驱动程序以编程方式运行
<a name="ql-reference.from.driver"></a>

要了解如何使用 QLDB 驱动程序以编程方式运行此语句，请参阅*驱动程序入门*中的以下教程：
+ Java: [快速入门教程](driver-quickstart-java.md) \$1 [说明书参考](driver-cookbook-java.md)
+ .NET: [快速入门教程](driver-quickstart-dotnet.md) \$1 [说明书参考](driver-cookbook-dotnet.md)
+ Go: [快速入门教程](driver-quickstart-golang.md) \$1 [说明书参考](driver-cookbook-golang.md)
+ Node.js: [快速入门教程](driver-quickstart-nodejs.md) \$1 [说明书参考](driver-cookbook-nodejs.md)
+ Python: [快速入门教程](driver-quickstart-python.md) \$1 [说明书参考](driver-cookbook-python.md)

# Amazon QLDB 中的 INSERT 命令
<a name="ql-reference.insert"></a>

**重要**  
终止支持通知：现有客户将能够使用 Amazon QLDB，直到 2025 年 7 月 31 日终止支持。有关更多详细信息，请参阅[将亚马逊 QLDB 账本迁移到亚马逊 Aurora PostgreSQL](https://aws.amazon.com/blogs/database/migrate-an-amazon-qldb-ledger-to-amazon-aurora-postgresql/)。

在 Amazon QLDB 中，使用`INSERT`命令将一个或多个 Amazon Ion 文档添加到表格中。

**注意**  
要了解如何控制对特定表运行此 PartiQL 命令的访问权限，请参阅。[请参阅《Amazon QLDB 开发人员》中的标准权限模式入门](getting-started-standard-mode.md)

**Topics**
+ [语法](#ql-reference.insert.syntax)
+ [参数](#ql-reference.insert.parameters)
+ [返回值](#ql-reference.insert.return)
+ [示例](#ql-reference.insert.examples)
+ [使用驱动程序以编程方式运行](#ql-reference.insert.driver)

## 语法
<a name="ql-reference.insert.syntax"></a>

插入单个文档。

```
INSERT INTO table_name VALUE document
```

插入多个文档。

```
INSERT INTO table_name << document, document, ... >>
```

## 参数
<a name="ql-reference.insert.parameters"></a>

***table\$1name***  
要在其中插入数据的用户表的名称。表必须已经存在。仅默认[用户视图](working.userdata.md)支持 DML 语句。

***document***  
有效的 [QLDB 文档](ql-reference.docs.md)。您必须指定至少一个文档。必须用逗号分隔多个文档。  
文档必须用大括号（`{...}`）表示。  
文档中的每个字段名称都是一个区分大小写的 Ion 符号，在 PartiQL 中可以用*单*引号（`'...'`）表示。  
字符串值也用*单*引号（`'...'`）在 PartiQL 中表示。  
任何 Ion 文字都可以用反引号（``...``）表示。

**注意**  
双尖括号（`<<...>>`）表示无序集合（ 在 PartiQL 中称为*数据包*），只有在要插入多个文档时才需要双尖括号。

## 返回值
<a name="ql-reference.insert.return"></a>

`documentId`— 您插入的每个文档的唯一 ID。

## 示例
<a name="ql-reference.insert.examples"></a>

插入单个文档。

```
INSERT INTO VehicleRegistration VALUE
{
    'VIN' : 'KM8SRDHF6EU074761', --string
    'RegNum' : 1722, --integer
    'State' : 'WA',
    'City' : 'Kent',
    'PendingPenaltyTicketAmount' : 130.75, --decimal
    'Owners' : { --nested struct
        'PrimaryOwner' : { 'PersonId': '294jJ3YUoH1IEEm8GSabOs' },
        'SecondaryOwners' : [ --list of structs
            { 'PersonId' : '1nmeDdLo3AhGswBtyM1eYh' },
            { 'PersonId': 'IN7MvYtUjkp1GMZu0F6CG9' }
        ]
    },
    'ValidFromDate' : `2017-09-14T`, --Ion timestamp literal with day precision
    'ValidToDate' : `2020-06-25T`
}
```

此语句返回您插入的每个文档的唯一 ID，如下所示。

```
{
    documentId: "2kKuOPNB07D2iTPBrUTWGl"
}
```

插入多个文档。

```
INSERT INTO Person << 
{
    'FirstName' : 'Raul',
    'LastName' : 'Lewis',
    'DOB' : `1963-08-19T`,
    'GovId' : 'LEWISR261LL',
    'GovIdType' : 'Driver License',
    'Address' : '1719 University Street, Seattle, WA, 98109'
},
{
    'FirstName' : 'Brent',
    'LastName' : 'Logan',
    'DOB' : `1967-07-03T`,
    'GovId' : 'LOGANB486CG',
    'GovIdType' : 'Driver License',
    'Address' : '43 Stockert Hollow Road, Everett, WA, 98203'
},
{
    'FirstName' : 'Alexis',
    'LastName' : 'Pena',
    'DOB' : `1974-02-10T`,
    'GovId' : '744 849 301',
    'GovIdType' : 'SSN',
    'Address' : '4058 Melrose Street, Spokane Valley, WA, 99206'
}
>>
```

此语句返回您插入的文档的唯一 ID，如下所示。

```
{
    documentId: "6WXzLscsJ3bDWW97Dy8nyp"
},
{
    documentId: "35e0ToZyTGJ7LGvcwrkX65"
},
{
    documentId: "BVHPcH612o7JROQ4yP8jiH"
}
```

## 使用驱动程序以编程方式运行
<a name="ql-reference.insert.driver"></a>

要了解如何使用 QLDB 驱动程序以编程方式运行此语句，请参阅*驱动程序入门*中的以下教程：
+ Java: [快速入门教程](driver-quickstart-java.md) \$1 [说明书参考](driver-cookbook-java.md)
+ .NET: [快速入门教程](driver-quickstart-dotnet.md) \$1 [说明书参考](driver-cookbook-dotnet.md)
+ Go: [快速入门教程](driver-quickstart-golang.md) \$1 [说明书参考](driver-cookbook-golang.md)
+ Node.js: [快速入门教程](driver-quickstart-nodejs.md) \$1 [说明书参考](driver-cookbook-nodejs.md)
+ Python: [快速入门教程](driver-quickstart-python.md) \$1 [说明书参考](driver-cookbook-python.md)

# Amazon QLDB 中的 SELECT 命令
<a name="ql-reference.select"></a>

**重要**  
终止支持通知：现有客户将能够使用 Amazon QLDB，直到 2025 年 7 月 31 日终止支持。有关更多详细信息，请参阅[将亚马逊 QLDB 账本迁移到亚马逊 Aurora PostgreSQL](https://aws.amazon.com/blogs/database/migrate-an-amazon-qldb-ledger-to-amazon-aurora-postgresql/)。

在 Amazon QLDB 中，使用`SELECT`命令从一个或多个表中检索数据。QLDB 中的每个 `SELECT` 查询都是在事务中处理的，并且受[事务超时限制](limits.md#limits.fixed)的约束。

结果的顺序不指定，可能因每个`SELECT`查询而异。在 QLDB 中，任何查询都不应该依赖结果顺序。

要了解如何控制对特定表运行此 PartiQL 命令的访问权限，请参阅。[请参阅《Amazon QLDB 开发人员》中的标准权限模式入门](getting-started-standard-mode.md)

**警告**  
当你在没有索引查找的情况下运行查询时，它会调用全表扫描。PartiQL 之所以支持此类查询，是因为其与 SQL 兼容。但是，*切勿*在 QLDB 中对生产用例运行表扫描。表扫描可能会导致大型表出现性能问题，包括并发冲突与事务超时。  
为避免表扫描，必须在索引字段或文档 ID 上使用*相等*运算符（`WHERE indexedField = 123`或`WHERE indexedField IN (456, 789)`）运行带有`WHERE`谓词子句的语句。有关更多信息，请参阅 [优化查询性能](working.optimize.md)。

**Topics**
+ [语法](#ql-reference.select.syntax)
+ [参数](#ql-reference.select.parameters)
+ [联接](#ql-reference.select.joins)
+ [嵌套查询限制](#ql-reference.select.subqueries)
+ [示例](#ql-reference.select.examples)
+ [使用驱动程序以编程方式运行](#ql-reference.select.driver)

## 语法
<a name="ql-reference.select.syntax"></a>

```
SELECT [ VALUE ] expression [ AS field_alias ] [, expression, ... ]
FROM source [ AS source_alias ] [ AT idx_alias ] [ BY id_alias ] [, source, ... ]
[ WHERE condition ]
```

## 参数
<a name="ql-reference.select.parameters"></a>

**值**  
表达式的限定符，它使查询返回原始数据类型值，而非将值封装在元组结构中。

***expression***  
（必需）从 `*` 通配符形成的投影，或者结果集的一个或多个属性名称或文档路径的投影列表。表达式可以包括对 [PartiQL 函数](ql-functions.md) 或通过 [PartiQL 运算符](ql-operators.md) 修改的字段的调用。

**正如 *field\$1alias***  
（可选）在最终结果集中使用字段的临时别名。`AS` 关键字是可选的。  
如果您没有为不是简单列名的表达式指定别名，则结果集将对该字段应用默认名称。

**来自 *source***  
要查询的来源。当前支持的唯一来源是表名、表之间的[内部联接](#ql-reference.select.joins)、嵌套`SELECT`查询（以[嵌套查询限制](#ql-reference.select.subqueries)）和表的[历史函数](working.history.md) 调用为准。  
您必须指定至少一个源。必须用逗号分隔多个源。

**正如 *source\$1alias***  
（可选）用户定义的别名，范围涵盖要更新的源。`SELECT`、`WHERE` 语句中所用的源别名必须在 `FROM` 语句中声明。`AS` 关键字是可选的。

**在 *idx\$1alias***  
（可选）用户定义的别名，它绑定至源列表中每个元素的索引（序数）。必须使用 `AT` 关键字在 `FROM` 子句中声明别名。

**由 *id\$1alias***  
（可选）用户定义的别名，它绑定至结果集中每个文档的 `id`元数据字段。必须使用 `BY` 关键字在 `FROM` 子句中声明别名。当您想在查询默认用户视图的同时投影或筛选[文档 ID](working.metadata.md)，这很有用。有关更多信息，请参阅 [通过 BY 子句查询文档 ID](working.metadata.by-clause.md)。

**哪里 *condition***  
查询的选择标准和联接标准（如适用）。

**注意**  
如果省略 `WHERE` 子句，则检索表中的所有文档。

## 联接
<a name="ql-reference.select.joins"></a>

目前仅支持内部联接。您可以使用显式 `INNER JOIN` 子句编写内部联接查询，如下所示。在此语法中，`JOIN`必须与`ON`配对，并且`INNER` 关键字是可选的。

```
SELECT expression
FROM table1 AS t1 [ INNER ] JOIN table2 AS t2
ON t1.element = t2.element
```

或者，您可以使用隐式语法编写内部联接，如下所示。

```
SELECT expression
FROM table1 AS t1, table2 AS t2
WHERE t1.element = t2.element
```

## 嵌套查询限制
<a name="ql-reference.select.subqueries"></a>

可以在 `SELECT` 表达式和 `FROM` 源代码中编写嵌套查询（子查询）。主要限制是，只有最外层的查询才能访问全局数据库环境。例如，假设您有一个包含表`VehicleRegistration`和`Person`的分类账。以下嵌套查询无效，因为内部`SELECT`试图访问`Person`。

```
SELECT r.VIN,
    (SELECT p.PersonId FROM Person AS p WHERE p.PersonId = r.Owners.PrimaryOwner.PersonId) AS PrimaryOwner
FROM VehicleRegistration AS r
```

而以下嵌套查询是有效的。

```
SELECT r.VIN, (SELECT o.PrimaryOwner.PersonId FROM @r.Owners AS o) AS PrimaryOwner
FROM VehicleRegistration AS r
```

## 示例
<a name="ql-reference.select.examples"></a>

以下查询显示了一个基本的 `SELECT`，其中包含使用`IN`运算符的标准`WHERE`谓词子句。

```
SELECT * FROM Vehicle
WHERE VIN IN ('1N4AL11D75C109151', 'KM8SRDHF6EU074761')
```

下图显示了使用字符串筛选条件的 `SELECT` 光投影。

```
SELECT FirstName, LastName, Address 
FROM Person 
WHERE Address LIKE '%Seattle%'
AND GovId = 'LEWISR261LL'
```

下面显示了用于扁平化嵌套数据的相关子查询。此处的 `@` 字符在技术上是可选的。但它明确表示你想在里面放置一个`Owners`结构`VehicleRegistration`，而不是一个名为不同的集合`Owners`（如有）。有关更多背景信息，请参阅 *处理数据和历史记录* 一章中的[嵌套数据](working.userdata.md#working.userdata.nested)。

```
SELECT 
    r.VIN, 
    o.SecondaryOwners
FROM
    VehicleRegistration AS r, @r.Owners AS o
WHERE
    r.VIN IN ('1N4AL11D75C109151', 'KM8SRDHF6EU074761')
```

下图显示了`SELECT` 列表中投射嵌套数据的子查询和隐式内部联接。

```
SELECT
    v.Make, 
    v.Model, 
    (SELECT VALUE o.PrimaryOwner.PersonId FROM @r.Owners AS o) AS PrimaryOwner
FROM 
    VehicleRegistration AS r, Vehicle AS v
WHERE 
    r.VIN = v.VIN AND r.VIN IN ('1N4AL11D75C109151', 'KM8SRDHF6EU074761')
```

下面显示了一个显式的内部联接。

```
SELECT
    v.Make, 
    v.Model, 
    r.Owners
FROM 
    VehicleRegistration AS r JOIN Vehicle AS v
ON
    r.VIN = v.VIN
WHERE
    r.VIN IN ('1N4AL11D75C109151', 'KM8SRDHF6EU074761')
```

下图显示了使用 `BY` 子句对文档 `id` 元数据字段的投影。

```
SELECT
    r_id,
    r.VIN
FROM
    VehicleRegistration AS r BY r_id
WHERE
    r_id = 'documentId'
```

以下内容分别使用`BY`来联接`DriversLicense`和`Person`表的`id`字段`PersonId`和文档字段。

```
SELECT * FROM DriversLicense AS d INNER JOIN Person AS p BY pid
ON d.PersonId = pid
WHERE pid = 'documentId'
```

以下内容使用子[已提交视图](working.metadata.md#working.metadata.committed)句分别连接`DriversLicense`和`Person`表的`id`字段`PersonId`和文档字段。

```
SELECT * FROM DriversLicense AS d INNER JOIN _ql_committed_Person AS cp
ON d.PersonId = cp.metadata.id
WHERE cp.metadata.id = 'documentId'
```

以下内容返回表 `VehicleRegistration` 中文 档`Owners.SecondaryOwners` 列表中每个人的 `PersonId`和索引（序数）。

```
SELECT s.PersonId, owner_idx
FROM VehicleRegistration AS r, @r.Owners.SecondaryOwners AS s AT owner_idx
WHERE r.VIN = 'KM8SRDHF6EU074761'
```

## 使用驱动程序以编程方式运行
<a name="ql-reference.select.driver"></a>

要了解如何使用 QLDB 驱动程序以编程方式运行此语句，请参阅*驱动程序入门*中的以下教程：
+ Java: [快速入门教程](driver-quickstart-java.md) \$1 [说明书参考](driver-cookbook-java.md)
+ .NET: [快速入门教程](driver-quickstart-dotnet.md) \$1 [说明书参考](driver-cookbook-dotnet.md)
+ Go: [快速入门教程](driver-quickstart-golang.md) \$1 [说明书参考](driver-cookbook-golang.md)
+ Node.js: [快速入门教程](driver-quickstart-nodejs.md) \$1 [说明书参考](driver-cookbook-nodejs.md)
+ Python: [快速入门教程](driver-quickstart-python.md) \$1 [说明书参考](driver-cookbook-python.md)

# Amazon QLDB 中的更新命令
<a name="ql-reference.update"></a>

**重要**  
终止支持通知：现有客户将能够使用 Amazon QLDB，直到 2025 年 7 月 31 日终止支持。有关更多详细信息，请参阅[将亚马逊 QLDB 账本迁移到亚马逊 Aurora PostgreSQL](https://aws.amazon.com/blogs/database/migrate-an-amazon-qldb-ledger-to-amazon-aurora-postgresql/)。

在 Amazon QLDB 中，使用`UPDATE`命令来修改文档中一个或多个元素的值。如元素不存在，则将其插入。

您也可以使用此命令在文档中显式插入和删除特定元素，类似于[FROM（插入、删除或设置）](ql-reference.from.md)语句。

**注意**  
要了解如何控制对特定表运行此 PartiQL 命令的访问权限，请参阅。[请参阅《Amazon QLDB 开发人员》中的标准权限模式入门](getting-started-standard-mode.md)

**Topics**
+ [语法](#ql-reference.update.syntax)
+ [参数](#ql-reference.update.parameters)
+ [返回值](#ql-reference.update.return)
+ [示例](#ql-reference.update.examples)
+ [使用驱动程序以编程方式运行](#ql-reference.update.driver)

## 语法
<a name="ql-reference.update.syntax"></a>

**UPDATE-SET**

更新文档中的一项或多项元素。如元素不存在，则将其插入。这在语义上与 [FROM-SET](ql-reference.from.md) 语句相同。

```
UPDATE table_name [ AS table_alias ] [ BY id_alias ]
SET element = data [, element = data, ... ]
[ WHERE condition ]
```

**UPDATE-INSERT**

在现有文档内插入新元素。要在表格中插入新顶级文档，必须使用[INSERT](ql-reference.insert.md)。

```
UPDATE table_name [ AS table_alias ] [ BY id_alias ]
INSERT INTO element VALUE data [ AT key_name ]
[ WHERE condition ]
```

**UPDATE-REMOVE**

移除文档中的现有元素，或者移除整个顶级文档。后者在语义上与传统 [DELETE](ql-reference.delete.md) 语法相同。

```
UPDATE table_name [ AS table_alias ] [ BY id_alias ]
REMOVE element
[ WHERE condition ]
```

## 参数
<a name="ql-reference.update.parameters"></a>

***table\$1name***  
包含要修改数据的用户表的名称。仅默认[用户视图](working.userdata.md)支持 DML 语句。每条语句只能在单个表中运行。

**正如 *table\$1alias***  
（可选）用户定义的别名，其范围涵盖要修改的表。`AS` 关键字是可选的。

**由 *id\$1alias***  
（可选）用户定义的别名，它绑定至结果集中每个文档的 `id`元数据字段。必须使用 `BY` 关键字在 `UPDATE` 子句中声明别名。当您想在查询默认用户视图的同时筛选[文档 ID](working.metadata.md)，这很有用。有关更多信息，请参阅 [通过 BY 子句查询文档 ID](working.metadata.by-clause.md)。

***element***  
待创建或修改的文档元素。

***data***  
元素新值。

**在 *key\$1name***  
在要修改的文档中添加的密钥名称。您必须指定相应的 `VALUE` 以及秘钥名称。这是在文档中的特定位置插入新 `AT` 值的必要条件。

**哪里 *condition***  
（必需）要修改的文档的选择条件。

**注意**  
如果省略 `WHERE` 子句，则表中的所有文档都被修改。

## 返回值
<a name="ql-reference.update.return"></a>

`documentId` — 您更新的每个文档的唯一 ID。

## 示例
<a name="ql-reference.update.examples"></a>

更新文档中的表。如果此字段不存在，则将其插入。

```
UPDATE Person AS p
SET p.LicenseNumber = 'HOLLOR123ZZ'
WHERE p.GovId = '111-22-3333'
```

在系统分配的文档`id`元数据字段上进行筛选。

```
UPDATE Person AS p BY pid
SET p.LicenseNumber = 'HOLLOR123ZZ'
WHERE pid = 'documentId'
```

覆盖整个文档。

```
UPDATE Person AS p
SET p = {
    'FirstName' : 'Rosemarie',
    'LastName' : 'Holloway',
    'DOB' : `1977-06-18T`,
    'GovId' : '111-22-3333',
    'GovIdType' : 'Driver License',
    'Address' : '4637 Melrose Street, Ellensburg, WA, 98926'
}
WHERE p.GovId = '111-22-3333'
```

修改文档中`Owners.SecondaryOwners`列表中*第一个*元素的`PersonId`字段。

```
UPDATE VehicleRegistration AS r
SET r.Owners.SecondaryOwners[0].PersonId = 'abc123'
WHERE r.VIN = '1N4AL11D75C109151'
```

`{'Mileage':26500}`以顶级名称/值对的形式插入到表格中的文档中。`Vehicle`

```
UPDATE Vehicle AS v
INSERT INTO v VALUE 26500 AT 'Mileage'
WHERE v.VIN = '1N4AL11D75C109151'
```

`{'PersonId':'abc123'}`以名称/值对的形式附加至`VehicleRegistration`表格中`Owners.SecondaryOwners`文档的字段中。请注意，语句`Owners.SecondaryOwners`必须已经存在且必须是列表数据类型才会生效。否则，`INSERT INTO`子句中必须使用关键字`AT`。

```
UPDATE VehicleRegistration AS r
INSERT INTO r.Owners.SecondaryOwners VALUE { 'PersonId' : 'abc123' }
WHERE r.VIN = '1N4AL11D75C109151'
```

将`{'PersonId':'abc123'}`以文档现有`Owners.SecondaryOwners`列表中的*首个*元素插入。

```
UPDATE VehicleRegistration AS r
INSERT INTO r.Owners.SecondaryOwners VALUE {'PersonId' : 'abc123'} AT 0
WHERE r.VIN = '1N4AL11D75C109151'
```

将多个名称/值对附加到文档中的现有`Owners.SecondaryOwners`列表中。

```
UPDATE VehicleRegistration AS r
INSERT INTO r.Owners.SecondaryOwners << {'PersonId' : 'abc123'}, {'PersonId' : 'def456'} >>
WHERE r.VIN = '1N4AL11D75C109151'
```

移除文档中的现有元素。

```
UPDATE Person AS p
REMOVE p.Address
WHERE p.GovId = '111-22-3333'
```

从表格中删除整个文档。

```
UPDATE Person AS p
REMOVE p
WHERE p.GovId = '111-22-3333'
```

移除`VehicleRegistration`表格中文档中`Owners.SecondaryOwners`列表的*第一个*元素。

```
UPDATE VehicleRegistration AS r
REMOVE r.Owners.SecondaryOwners[0]
WHERE r.VIN = '1N4AL11D75C109151'
```

## 使用驱动程序以编程方式运行
<a name="ql-reference.update.driver"></a>

要了解如何使用 QLDB 驱动程序以编程方式运行此语句，请参阅*驱动程序入门*中的以下教程：
+ Java: [快速入门教程](driver-quickstart-java.md) \$1 [说明书参考](driver-cookbook-java.md)
+ .NET: [快速入门教程](driver-quickstart-dotnet.md) \$1 [说明书参考](driver-cookbook-dotnet.md)
+ Go: [快速入门教程](driver-quickstart-golang.md) \$1 [说明书参考](driver-cookbook-golang.md)
+ Node.js: [快速入门教程](driver-quickstart-nodejs.md) \$1 [说明书参考](driver-cookbook-nodejs.md)
+ Python: [快速入门教程](driver-quickstart-python.md) \$1 [说明书参考](driver-cookbook-python.md)

# Amazon QLDB 中的 UNDROP TABLE 命令
<a name="ql-reference.undrop-table"></a>

**重要**  
终止支持通知：现有客户将能够使用 Amazon QLDB，直到 2025 年 7 月 31 日终止支持。有关更多详细信息，请参阅[将亚马逊 QLDB 账本迁移到亚马逊 Aurora PostgreSQL](https://aws.amazon.com/blogs/database/migrate-an-amazon-qldb-ledger-to-amazon-aurora-postgresql/)。

在 Amazon QLDB 中，使用 `UNDROP TABLE` 命令重新激活之前删除的表（即已停用）。停用或重新激活表，不会影响其文档或索引。

**注意**  
要了解如何控制对特定表运行此 PartiQL 命令的访问权限，请参阅。[请参阅《Amazon QLDB 开发人员》中的标准权限模式入门](getting-started-standard-mode.md)

**Topics**
+ [语法](#ql-reference.undrop-table.syntax)
+ [参数](#ql-reference.undrop-table.parameters)
+ [返回值](#ql-reference.undrop-table.return)
+ [示例](#ql-reference.undrop-table.examples)

## 语法
<a name="ql-reference.undrop-table.syntax"></a>

```
UNDROP TABLE "tableId"
```

## 参数
<a name="ql-reference.undrop-table.parameters"></a>

**"*tableId*"**  
待索引的表的唯一 ID，用双引号表示。  
该表必须先前已被删除，这意味着它存在于[系统目录表](working.catalog.md)，`information_schema.user_tables`并且状态为`INACTIVE`。也不能存在同名活动现有表。

## 返回值
<a name="ql-reference.undrop-table.return"></a>

`tableId` - 您重新激活的表的唯一 ID。

## 示例
<a name="ql-reference.undrop-table.examples"></a>

```
UNDROP TABLE "5PLf9SXwndd63lPaSIa0O6"
```