

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

# DynamoDB 資料表上的基本操作
<a name="WorkingWithTables.Basics"></a>

與其他資料庫系統類似，Amazon DynamoDB 會將資料存放在資料表中。您可使用幾個基本操作來管理您的資料表。

**Topics**
+ [建立資料表](#WorkingWithTables.Basics.CreateTable)
+ [說明資料表](#WorkingWithTables.Basics.DescribeTable)
+ [更新資料表](#WorkingWithTables.Basics.UpdateTable)
+ [刪除資料表](#WorkingWithTables.Basics.DeleteTable)
+ [使用刪除保護](#WorkingWithTables.Basics.DeletionProtection)
+ [列出資料表名稱](#WorkingWithTables.Basics.ListTables)
+ [說明佈建輸送量配額](#WorkingWithTables.Basics.DescribeLimits)

## 建立資料表
<a name="WorkingWithTables.Basics.CreateTable"></a>

使用 `CreateTable` 操作在 Amazon DynamoDB 中建立資料表。若要建立資料表，您必須提供以下資訊：
+ **資料表名稱** 名稱必須符合 DynamoDB 命名規則，且目前 AWS 帳戶和區域必須是唯一的。例如，您可以在美國東部 (維吉尼亞北部) 建立 `People` 資料表，在歐洲 (愛爾蘭) 建立另一個 `People` 資料表。不過，這兩個資料表彼此必須完全不同。如需詳細資訊，請參閱 [Amazon DynamoDB 中支援的資料類型和命名規則](HowItWorks.NamingRulesDataTypes.md)。
+ **主索引鍵。**主索引鍵可以包含一個屬性 (分割區索引鍵) 或兩個屬性 (分割區索引鍵和排序索引鍵)。您需要提供屬性名稱、資料類型和每個屬性的角色：`HASH` (適用於分割區索引鍵) 和 `RANGE` (適用於排序索引鍵)。如需詳細資訊，請參閱 [主索引鍵](HowItWorks.CoreComponents.md#HowItWorks.CoreComponents.PrimaryKey)。
+ **輸送量設定 (針對佈建的資料表)。**如果使用佈建的模式，您必須指定資料表的讀取和寫入初始輸送量設定。您稍後可以修改這些設定，或讓 DynamoDB Auto Scaling 功能來管理設定。如需詳細資訊，請參閱[DynamoDB 佈建容量模式](provisioned-capacity-mode.md)及[使用 DynamoDB Auto Scaling 功能自動管理輸送容量](AutoScaling.md)。

### 範例 1：建立隨需資料表
<a name="create-payperrequest-example"></a>

使用隨需模式來建立相同的資料表 `Music`。

```
aws dynamodb create-table \
    --table-name Music \
    --attribute-definitions \
        AttributeName=Artist,AttributeType=S \
        AttributeName=SongTitle,AttributeType=S \
    --key-schema \
        AttributeName=Artist,KeyType=HASH \
        AttributeName=SongTitle,KeyType=RANGE \
    --billing-mode=PAY_PER_REQUEST
```

`CreateTable` 操作會傳回資料表的中繼資料，如下所示。

```
{
    "TableDescription": {
        "TableArn": "arn:aws:dynamodb:us-east-1:123456789012:table/Music",
        "AttributeDefinitions": [
            {
                "AttributeName": "Artist",
                "AttributeType": "S"
            },
            {
                "AttributeName": "SongTitle",
                "AttributeType": "S"
            }
        ],
        "ProvisionedThroughput": {
            "NumberOfDecreasesToday": 0,
            "WriteCapacityUnits": 0,
            "ReadCapacityUnits": 0
        },
        "TableSizeBytes": 0,
        "TableName": "Music",
        "BillingModeSummary": {
            "BillingMode": "PAY_PER_REQUEST"
        },
        "TableStatus": "CREATING",
        "TableId": "12345678-0123-4567-a123-abcdefghijkl",
        "KeySchema": [
            {
                "KeyType": "HASH",
                "AttributeName": "Artist"
            },
            {
                "KeyType": "RANGE",
                "AttributeName": "SongTitle"
            }
        ],
        "ItemCount": 0,
        "CreationDateTime": 1542397468.348
    }
}
```

**重要**  
 呼叫隨需資料表上的 `DescribeTable` 時，讀取容量單位與寫入容量單位設為 0。

### 範例 2：建立佈建資料表
<a name="create-provisioned-example"></a>

下列 AWS CLI 範例示範如何建立資料表 (`Music`)。主索引鍵包含 `Artist` (分割區索引鍵) 和 `SongTitle` (排序索引鍵)，而且它們每一個的資料類型都是 `String`。此資料表的輸送量上限是 10 個讀取容量單位和 5 個寫入容量單位。

```
aws dynamodb create-table \
    --table-name Music \
    --attribute-definitions \
        AttributeName=Artist,AttributeType=S \
        AttributeName=SongTitle,AttributeType=S \
    --key-schema \
        AttributeName=Artist,KeyType=HASH \
        AttributeName=SongTitle,KeyType=RANGE \
    --provisioned-throughput \
        ReadCapacityUnits=10,WriteCapacityUnits=5
```

`CreateTable` 操作會傳回資料表的中繼資料，如下所示。

```
{
    "TableDescription": {
        "TableArn": "arn:aws:dynamodb:us-east-1:123456789012:table/Music",
        "AttributeDefinitions": [
            {
                "AttributeName": "Artist",
                "AttributeType": "S"
            },
            {
                "AttributeName": "SongTitle",
                "AttributeType": "S"
            }
        ],
        "ProvisionedThroughput": {
            "NumberOfDecreasesToday": 0,
            "WriteCapacityUnits": 5,
            "ReadCapacityUnits": 10
        },
        "TableSizeBytes": 0,
        "TableName": "Music",
        "TableStatus": "CREATING",
        "TableId": "12345678-0123-4567-a123-abcdefghijkl",
        "KeySchema": [
            {
                "KeyType": "HASH",
                "AttributeName": "Artist"
            },
            {
                "KeyType": "RANGE",
                "AttributeName": "SongTitle"
            }
        ],
        "ItemCount": 0,
        "CreationDateTime": 1542397215.37
    }
}
```

`TableStatus` 元素指出資料表的目前狀態 (`CREATING`)。根據您指定的 `ReadCapacityUnits` 和 `WriteCapacityUnits` 值，可能需要一些時間才能建立資料表。這些項目的較大值需要 DynamoDB 為資料表配置更多資源。

### 範例 3：使用 DynamoDB 標準的不常存取資料表類別建立資料表
<a name="create-infrequent-access-example"></a>

若要建立相同的 `Music` 資料表，使用 DynamoDB 標準：不常存取資料表類別。

```
aws dynamodb create-table \
    --table-name Music \
    --attribute-definitions \
        AttributeName=Artist,AttributeType=S \
        AttributeName=SongTitle,AttributeType=S \
    --key-schema \
        AttributeName=Artist,KeyType=HASH \
        AttributeName=SongTitle,KeyType=RANGE \
    --provisioned-throughput \
        ReadCapacityUnits=10,WriteCapacityUnits=5 \
    --table-class STANDARD_INFREQUENT_ACCESS
```

`CreateTable` 操作會傳回資料表的中繼資料，如下所示。

```
{
    "TableDescription": {
        "TableArn": "arn:aws:dynamodb:us-east-1:123456789012:table/Music",
        "AttributeDefinitions": [
            {
                "AttributeName": "Artist",
                "AttributeType": "S"
            },
            {
                "AttributeName": "SongTitle",
                "AttributeType": "S"
            }
        ],
        "ProvisionedThroughput": {
            "NumberOfDecreasesToday": 0,
            "WriteCapacityUnits": 5,
            "ReadCapacityUnits": 10
        },
        "TableClassSummary": {
            "LastUpdateDateTime": 1542397215.37,
            "TableClass": "STANDARD_INFREQUENT_ACCESS"
        },
        "TableSizeBytes": 0,
        "TableName": "Music",
        "TableStatus": "CREATING",
        "TableId": "12345678-0123-4567-a123-abcdefghijkl",
        "KeySchema": [
            {
                "KeyType": "HASH",
                "AttributeName": "Artist"
            },
            {
                "KeyType": "RANGE",
                "AttributeName": "SongTitle"
            }
        ],
        "ItemCount": 0,
        "CreationDateTime": 1542397215.37
    }
}
```

## 說明資料表
<a name="WorkingWithTables.Basics.DescribeTable"></a>

若要檢視資料表的詳細資訊，請使用 `DescribeTable` 操作。您必須提供資料表名稱。`DescribeTable` 中輸出的格式與 `CreateTable` 相同。它包含建立資料表的時間戳記、其索引鍵結構描述、其佈建的輸送量設定、其預估大小以及任何現有的次要索引。

**重要**  
 呼叫隨需資料表上的 `DescribeTable` 時，讀取容量單位與寫入容量單位設為 0。

**Example**  

```
aws dynamodb describe-table --table-name Music
```

`TableStatus` 從 `CREATING` 變更為 `ACTIVE` 之後，就表示資料表準備就緒可供使用。

**注意**  
如果您在 `CreateTable` 請求之後立即發出 `DescribeTable` 請求，則 DynamoDB 可能會傳回錯誤 (`ResourceNotFoundException`)。原因是 `DescribeTable` 使用最終一致查詢，而且您資料表的中繼資料目前可能無法使用。請等待幾秒，然後再次重試 `DescribeTable` 請求。  
為計算費用，您的 DynamoDB 儲存費用包含 100 個位元組的個別項目成本。(如需詳細資訊，請前往 [DynamoDB 定價](https://aws.amazon.com/dynamodb/pricing/)。) 個別項目的這個額外 100 個位元組不會用於容量單位計算，或不供 `DescribeTable` 操作使用。

## 更新資料表
<a name="WorkingWithTables.Basics.UpdateTable"></a>

`UpdateTable` 操作可讓您執行下列其中一項：
+ 修改資料表的佈建輸送量設定 (針對佈建模式的資料表)。
+ 變更資料表的讀取/寫入容量模式。
+ 在資料表中修改全域次要索引 (請參閱[在 DynamoDB 中使用全域次要索引](GSI.md))。
+ 啟用或停用資料表上的 DynamoDB Streams (請參閱 [DynamoDB Streams 的變更資料擷取](Streams.md))。

**Example**  
下列 AWS CLI 範例顯示如何修改資料表的佈建輸送量設定。  

```
aws dynamodb update-table --table-name Music \
    --provisioned-throughput ReadCapacityUnits=20,WriteCapacityUnits=10
```

**注意**  
當您發出 `UpdateTable` 請求時，資料表的狀態會從 `AVAILABLE` 變更為 `UPDATING`。資料表在處於 `UPDATING` 時仍然完全可供使用。此程序完成時，資料表狀態會從 `UPDATING` 變更為 `AVAILABLE`。

**Example**  
下列 AWS CLI 範例顯示如何將資料表的讀取/寫入容量模式修改為隨需模式。  

```
aws dynamodb update-table --table-name Music \
    --billing-mode PAY_PER_REQUEST
```

## 刪除資料表
<a name="WorkingWithTables.Basics.DeleteTable"></a>

您可以使用 `DeleteTable` 操作來移除未使用的資料表。刪除資料表是無法復原的操作。使用 AWS 管理主控台刪除資料表，請參閲 [步驟 6：(選用) 刪除 DynamoDB 資料表以清除資源](getting-started-step-6.md)。

**Example**  
下列 AWS CLI 範例顯示如何刪除資料表。  

```
aws dynamodb delete-table --table-name Music
```

當您發出 `DeleteTable` 請求時，資料表的狀態會從 `ACTIVE` 變更為 `DELETING`。根據使用的資源 (例如資料表中所存放的資料，以及資料表上的任何串流或索引)，可能需要一些時間才能刪除資料表。

`DeleteTable` 操作結束時，資料表就不再存在於 DynamoDB 中。

## 使用刪除保護
<a name="WorkingWithTables.Basics.DeletionProtection"></a>

您可以使用刪除保護屬性，來保護資料表免於遭到意外刪除。為資料表啟用此屬性有助於確保管理員在常態資料表管理操作期間，不會意外刪除資料表。這將有助於防止您的正常業務營運中斷。

 資料表擁有者或授權管理員可控制每個資料表的刪除保護內容。每個資料表的刪除保護屬性預設是關閉的。這包括全域複本，以及從備份還原的資料表。停用資料表的刪除保護時，任何獲得 Identity and Access Management (IAM) 政策授權的使用者都可以刪除該資料表。資料表啟用刪除保護時，沒有人可將其刪除。

若要變更此設定，請移至資料表的**其他設定**，瀏覽至**刪除保護**面板，然後選取**啟用刪除保護**。

刪除保護屬性受到 DynamoDB 主控台、API、CLI/SDK 和 CloudFormation的支援。`CreateTable` API 支援資料表建立時的刪除保護屬性，而 `UpdateTable` API 支援變更現有資料表的刪除保護屬性。

**注意**  
如果刪除 AWS 帳戶，該帳戶的所有資料，包括資料表，仍會在 90 天內刪除。
如果 DynamoDB 喪失用來加密資料表的客戶自管金鑰存取權，它仍會封存資料表。存檔涉及製作資料表的備份和刪除原始資料表。

## 列出資料表名稱
<a name="WorkingWithTables.Basics.ListTables"></a>

`ListTables` 操作會傳回目前 AWS 帳戶和區域的 DynamoDB 資料表名稱。

**Example**  
下列 AWS CLI 範例示範如何列出 DynamoDB 資料表名稱。  

```
aws dynamodb list-tables
```

## 說明佈建輸送量配額
<a name="WorkingWithTables.Basics.DescribeLimits"></a>

`DescribeLimits` 操作會傳回目前 AWS 帳戶和區域的目前讀取和寫入容量配額。

**Example**  
下列 AWS CLI 範例示範如何描述目前的佈建輸送量配額。  

```
aws dynamodb describe-limits
```
輸出會顯示目前 AWS 帳戶和區域的讀取和寫入容量單位配額上限。

如需這些配額以及如何請求提高配額的詳細資訊，請參閱[輸送量預設配額](ServiceQuotas.md#default-limits-throughput)。