

# Diferenças entre um banco de dados relacional (SQL) e o DynamoDB ao gravar dados em uma tabela
<a name="SQLtoNoSQL.WriteData"></a>

As tabelas de bancos de dados relacionais contêm *linhas* de dados. As linhas são compostas de *colunas*. As tabelas do Amazon DynamoDB contêm *itens*. Os itens são compostos de *atributos*.

Esta seção descreve como gravar uma linha (ou item) em uma tabela.

**Topics**
+ [Gravar dados em uma tabela com o SQL](#SQLtoNoSQL.WriteData.SQL)
+ [Gravar dados em uma tabela no DynamoDB](#SQLtoNoSQL.WriteData.DynamoDB)

## Gravar dados em uma tabela com o SQL
<a name="SQLtoNoSQL.WriteData.SQL"></a>

A tabela em um banco de dados relacional é uma estrutura de dados bidimensional composta por linhas e colunas. Alguns sistemas de gerenciamento de banco de dados também fornecem suporte para dados semiestruturados, geralmente com tipos de dados nativos JSON ou XML. No entanto, os detalhes de implementação variam entre fornecedores.

No SQL, você usa a instrução `INSERT` para adicionar uma linha a uma tabela.

```
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}'
);
```

A chave primária dessa tabela consiste em *Artist* e *SongTitle*. Você deve especificar valores para essas colunas.

**nota**  
Este exemplo usa a coluna *Tags* para armazenar dados semiestruturados sobre as músicas na tabela *Music*. A coluna *Tags* está definida como tipo TEXT, que pode armazenar até 65.535 caracteres em MySQL. 

## Gravar dados em uma tabela no DynamoDB
<a name="SQLtoNoSQL.WriteData.DynamoDB"></a>

No Amazon DynamoDB, é possível usar a API do DynamoDB ou do [PartiQL](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/ql-reference.html) (uma linguagem de consultas compatível com SQL) para adicionar um item a uma tabela.

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

Com a API do DynamoDB, você usa a operação `PutItem` para adicionar um item a uma tabela.

```
{
    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
        }
    }
}
```

A chave primária dessa tabela consiste em *Artist* e *SongTitle*. Você deve especificar valores para esses atributos.

Aqui estão algumas coisas importantes para saber sobre este exemplo de `PutItem`:
+ O DynamoDB oferece suporte nativo a documentos usando JSON. Isso torna o DynamoDB ideal para armazenar dados semiestruturados, como *Tags*. Você também pode recuperar e manipular dados de dentro de documentos JSON.
+ A tabela *Music* não tem atributos predefinidos, além da chave primária (*Artist* e *SongTitle*).
+ A maioria dos bancos de dados SQL são orientados a transação. Quando você emite uma instrução `INSERT`, as modificações de dados não são permanentes até que você execute uma instrução `COMMIT`. Com o Amazon DynamoDB, os efeitos de uma operação `PutItem` são permanentes quando o DynamoDB responde com um código de status HTTP 200 (`OK`).

A seguir há alguns outros exemplos de `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"
    }
}
```

**nota**  
Além de `PutItem`, o DynamoDB comporta uma operação `BatchWriteItem` para gravar vários itens ao mesmo tempo.

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

Com PartiQL, você usa a operação `ExecuteStatement` para adicionar um item a uma tabela, usando a instrução `Insert` PartiQL.

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

A chave primária dessa tabela consiste em *Artist* e *SongTitle*. Você deve especificar valores para esses atributos.

**nota**  
Para obter exemplos de código que usam `Insert` e `ExecuteStatement`, consulte [Instruções Insert em PartiQL para DynamoDB](ql-reference.insert.md).

------