

# Diferencias entre una base de datos relacional (SQL) y DynamoDB al escribir datos en una tabla
<a name="SQLtoNoSQL.WriteData"></a>

Las tablas de las bases de datos relacionales contienen *filas* de datos. Las filas constan de *columnas*. Las tablas de Amazon DynamoDB contienen *elementos*. Los elementos constan de *atributos*.

En esta sección se describe cómo escribir una fila (o un elemento) en una tabla.

**Topics**
+ [

## Escritura de datos en una tabla con SQL
](#SQLtoNoSQL.WriteData.SQL)
+ [

## Escritura de datos en una tabla de DynamoDB
](#SQLtoNoSQL.WriteData.DynamoDB)

## Escritura de datos en una tabla con SQL
<a name="SQLtoNoSQL.WriteData.SQL"></a>

Una tabla de una base de datos relacional es una estructura de datos bidimensional formada por filas y columnas. Algunos sistemas de administración de bases de datos también ofrecen compatibilidad con datos semiestructurados, normalmente con los tipos de datos de JSON o XML nativos. Sin embargo, los detalles de implementación varían según el proveedor.

En SQL, se utilizaría la instrucción `INSERT` para agregar una fila a una tabla.

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

La clave principal de esta tabla consta de *Artist* y *SongTitle*. Debe especificar los valores de estas columnas.

**nota**  
En este ejemplo se utiliza la columna *Tags* para almacenar datos semiestructurados relativos a las canciones de la tabla *Music*. La columna *Tags* se define como el tipo TEXT, que permite almacenar hasta 65,535 caracteres en MySQL. 

## Escritura de datos en una tabla de DynamoDB
<a name="SQLtoNoSQL.WriteData.DynamoDB"></a>

En Amazon DynamoDB, puede utilizar la API de DynamoDB o [PartiQL](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/ql-reference.html) (un lenguaje de consulta compatible con SQL) para agregar un elemento a una tabla.

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

Con la API de DynamoDB, se utiliza la operación `PutItem` para agregar un elemento a una tabla.

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

La clave principal de esta tabla consta de *Artist* y *SongTitle*. Debe especificar los valores de estos atributos.

A continuación se indican algunos aspectos clave que es preciso tener en cuenta sobre este ejemplo de `PutItem`:
+ DynamoDB proporciona compatibilidad nativa con documentos mediante JSON. Por ello, DynamoDB resulta idóneo para almacenar datos semiestructurados, como las *etiquetas*. Además, puede recuperar y manipular los datos contenidos en los documentos JSON.
+ La tabla *Music* no tiene atributos predefinidos aparte de la clave principal (*Artist* y *SongTitle*).
+ La mayoría de las bases de datos SQL están orientadas a transacciones. Cuando se emite una instrucción `INSERT`, las modificaciones de los datos no son permanentes hasta que se emite una instrucción `COMMIT`. Con Amazon DynamoDB, los efectos de una operación `PutItem` son permanentes cuando DynamoDB responde con un código de estado HTTP 200 (`OK`).

A continuación, se muestran algunos otros ejemplos 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**  
Además de `PutItem`, DynamoDB admite la operación `BatchWriteItem` para escribir varios elementos a la vez.

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

Con PartiQL, se utiliza la operación `ExecuteStatement` para agregar un elemento a una tabla, mediante la instrucción `Insert` de PartiQL.

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

La clave principal de esta tabla consta de *Artist* y *SongTitle*. Debe especificar los valores de estos atributos.

**nota**  
Para obtener ejemplos de código mediante `Insert` y `ExecuteStatement`, consulte [Instrucciones de inserción de PartiQL para DynamoDB](ql-reference.insert.md).

------