

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

# 寫入資料表時，關聯式 (SQL) 資料庫與 DynamoDB 的差異
<a name="SQLtoNoSQL.WriteData"></a>

關聯式資料庫資料表含有資料的資料*列*。資料列由*欄*所組成。Amazon DynamoDB 資料表包含*項目*。項目由*屬性*組成。

本節說明如何將一個資料列 (或項目) 寫入資料表。

**Topics**
+ [將資料寫入 SQL 資料表](#SQLtoNoSQL.WriteData.SQL)
+ [將資料寫入 DynamoDB 中的資料表](#SQLtoNoSQL.WriteData.DynamoDB)

## 將資料寫入 SQL 資料表
<a name="SQLtoNoSQL.WriteData.SQL"></a>

關聯式資料庫中的資料表為二維資料結構，由資料列和資料行組成。某些資料庫管理系統也支援半結構化資料，通常使用原生 JSON 或 XML 資料類型。但是，實作細節會因廠商而有所不同。

在 SQL 中，您會使用 `INSERT` 陳述式新增列至資料表。

```
INSERT INTO Music
    (Artist, SongTitle, AlbumTitle,
    Year, Price, Genre,
    Tags)
VALUES(
    'No One You Know', 'Call Me Today', 'Somewhat Famous',
    2015, 2.14, 'Country',
    '{"Composers": ["Smith", "Jones", "Davis"],"LengthInSeconds": 214}'
);
```

此資料表的主索引鍵包含 *Artist* 和 *SongTitle*。您必須指定這些資料行的值。

**注意**  
此範例使用 *Tags* 資料行存放 *Music* 資料表中歌曲的半結構化資料。*Tags* 資料行已定義為 TEXT 類型，可在 MySQL 中存放多達 65,535 個字元。

## 將資料寫入 DynamoDB 中的資料表
<a name="SQLtoNoSQL.WriteData.DynamoDB"></a>

在 Amazon DynamoDB 中，您可以使用 DynamoDB API 或 [PartiQL](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/ql-reference.html) (SQL 相容查詢語言) 將項目新增至資料表。

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

借助 DynamoDB API，您可以使用 `PutItem` 操作將項目新增至資料表。

```
{
    TableName: "Music",
    Item: {
        "Artist":"No One You Know",
        "SongTitle":"Call Me Today",
        "AlbumTitle":"Somewhat Famous",
        "Year": 2015,
        "Price": 2.14,
        "Genre": "Country",
        "Tags": {
            "Composers": [
                  "Smith",
                  "Jones",
                  "Davis"
            ],
            "LengthInSeconds": 214
        }
    }
}
```

此資料表的主索引鍵包含 *Artist* 和 *SongTitle*。您必須指定這些屬性的值。

以下為此 `PutItem` 範例的一些重要須知：
+ DynamoDB 會使用 JSON 提供文件的原生支援。這讓 DynamoDB 適合存放半結構化資料，例如 *Tags*。您也可以從 JSON 文件擷取及運用資料。
+ *Music* (音樂) 資料表除了主索引鍵 (*Artist* 和 *SongTitle*) 之外，沒有任何預先定義的屬性。
+ 多數 SQL 資料庫都以交易為導向。當您發出 `INSERT` 陳述式時，資料都不會永久修改，直到您發出 `COMMIT` 陳述式為止。若使用 Amazon DynamoDB，當 DynamoDB 以 HTTP 200 狀態代碼 (`OK`) 回覆時，`PutItem` 操作會永久生效。

下列是一些其他的 `PutItem` 範例。

```
{
    TableName: "Music",
    Item: {
        "Artist": "No One You Know",
        "SongTitle": "My Dog Spot",
        "AlbumTitle":"Hey Now",
        "Price": 1.98,
        "Genre": "Country",
        "CriticRating": 8.4
    }
}
```

```
{
    TableName: "Music",
    Item: {
        "Artist": "No One You Know",
        "SongTitle": "Somewhere Down The Road",
        "AlbumTitle":"Somewhat Famous",
        "Genre": "Country",
        "CriticRating": 8.4,
        "Year": 1984
    }
}
```

```
{
    TableName: "Music",
    Item: {
        "Artist": "The Acme Band",
        "SongTitle": "Still In Love",
        "AlbumTitle":"The Buck Starts Here",
        "Price": 2.47,
        "Genre": "Rock",
        "PromotionInfo": {
            "RadioStationsPlaying":[
                 "KHCR", "KBQX", "WTNR", "WJJH"
            ],
            "TourDates": {
                "Seattle": "20150625",
                "Cleveland": "20150630"
            },
            "Rotation": "Heavy"
        }
    }
}
```

```
{
    TableName: "Music",
    Item: {
        "Artist": "The Acme Band",
        "SongTitle": "Look Out, World",
        "AlbumTitle":"The Buck Starts Here",
        "Price": 0.99,
        "Genre": "Rock"
    }
}
```

**注意**  
除了 `PutItem` 之外，DynamoDB 還支援 `BatchWriteItem` 操作，可讓您同時寫入多個項目。

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

借助 PartiQL，您可以使用 PartiQL `Insert` 陳述式，使用 `ExecuteStatement` 操作將項目新增至資料表，

```
INSERT into Music value {  
    'Artist': 'No One You Know',
    'SongTitle': 'Call Me Today',
    'AlbumTitle': 'Somewhat Famous',
    'Year' : '2015',
    'Genre' : 'Acme'
}
```

此資料表的主索引鍵包含 *Artist* 和 *SongTitle*。您必須指定這些屬性的值。

**注意**  
如需使用 `Insert` 和 `ExecuteStatement` 的程式碼範例，請參閱 [適用於 DynamoDB 的 PartiQL Insert 陳述式](ql-reference.insert.md)。

------