> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-fix-nav-issues.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Añadir una columna a una tabla

> En esta guía, aprenderemos a añadir una columna a una tabla existente.

<div id="adding-a-column-to-a-table">
  ## Agregar una columna a una tabla
</div>

Usaremos `clickhouse-local`:

```bash theme={null}
clickhouse -m --output_format_pretty_row_numbers=
```

Imaginemos que tenemos la siguiente tabla:

```sql theme={null}
CREATE TABLE events (
    date Date DEFAULT today(), 
    name String
) 
ENGINE = MergeTree
ORDER BY date;
```

Añadamos un registro:

```sql theme={null}
INSERT INTO events (name) VALUES ('Alexey');
```

Y ahora, consulta la tabla `events`:

```sql theme={null}
SELECT *
FROM events;
```

```text theme={null}
┌───────date─┬─name───┐
│ 2024-12-18 │ Alexey │
└────────────┴────────┘
```

<div id="adding-a-new-column">
  ## Añadir una nueva columna
</div>

Supongamos ahora que vamos a añadir una nueva columna llamada `favoriteNumber`, que será de tipo `Float64`.
Podemos hacerlo con la cláusula [`ALTER TABLE...ADD COLUMN`](/es/reference/statements/alter/column#add-column):

```sql theme={null}
ALTER TABLE events 
ADD COLUMN favoriteNumber Float64 DEFAULT 7;
```

Si consultamos la tabla `events`, veremos la siguiente salida:

```text theme={null}
┌───────date─┬─name───┬─favoriteNumber─┐
│ 2024-12-18 │ Alexey │              7 │
└────────────┴────────┴────────────────┘
```

La fila `Alexey` tiene por defecto el valor 7, ya que esa columna no existía cuando añadimos esa fila.
A continuación, añadamos otra columna:

```sql theme={null}
INSERT INTO events (name) VALUES ('Tyler');
```

Si consultamos la tabla `events`, veremos la siguiente salida:

```text theme={null}
┏━━━━━━━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━━━━┓
┃       date ┃ name   ┃ favoriteNumber ┃
┡━━━━━━━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━━━━┩
│ 2024-12-18 │ Tyler  │              7 │
├────────────┼────────┼────────────────┤
│ 2024-12-18 │ Alexey │              7 │
└────────────┴────────┴────────────────┘
```

<div id="modifying-a-columns-default-value">
  ## Modificar el valor predeterminado de una columna
</div>

Si modificamos la columna `favoriteNumber` para que tenga un tipo diferente mediante la cláusula [`ALTER TABLE...MODIFY COLUMN`](/es/reference/statements/alter/column#modify-column), la cosa se pone interesante:

```sql theme={null}
ALTER TABLE events 
MODIFY COLUMN favoriteNumber Float64 DEFAULT 99;
```

Si volvemos a consultar `events`, veremos este resultado:

```text theme={null}
┏━━━━━━━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━━━━┓
┃       date ┃ name   ┃ favoriteNumber ┃
┡━━━━━━━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━━━━┩
│ 2024-12-18 │ Tyler  │              7 │
├────────────┼────────┼────────────────┤
│ 2024-12-18 │ Alexey │             99 │
└────────────┴────────┴────────────────┘
```

`Tyler` conserva el valor `7`, que era el predeterminado cuando se creó esa fila.
`Alexey` toma el nuevo valor predeterminado, `99`, porque la columna `favoriteNumber` no existía cuando se creó esa fila.

Si queremos que la fila de `Alexey` use de inmediato el valor predeterminado actual, debemos llamar a [`OPTIMIZE TABLE` ](/es/reference/statements/optimize) para forzar que los valores predeterminados actuales se escriban en disco:

```sql theme={null}
OPTIMIZE TABLE events;
```

Una vez hecho eso, supongamos que volvemos a cambiar el valor predeterminado:

```sql theme={null}
ALTER TABLE events 
MODIFY COLUMN favoriteNumber Float64 DEFAULT 21;
```

Y luego inserte otra fila:

```sql theme={null}
INSERT INTO events (name) VALUES ('Tanya');
```

Por último, consultemos `events` una vez más:

```text theme={null}
┏━━━━━━━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━━━━┓
┃       date ┃ name   ┃ favoriteNumber ┃
┡━━━━━━━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━━━━┩
│ 2024-12-18 │ Alexey │             99 │
├────────────┼────────┼────────────────┤
│ 2024-12-18 │ Tyler  │              7 │
├────────────┼────────┼────────────────┤
│ 2024-12-18 │ Tanya  │             21 │
└────────────┴────────┴────────────────┘
```

`Tanya` adopta el nuevo valor predeterminado de `21`, pero `Alexey` conserva el valor predeterminado anterior de `99`.

<div id="controlling-column-position-in-table">
  ## Controlar la posición de una columna en la tabla
</div>

Cuando agregamos una nueva columna, de forma predeterminada se añadirá al final de la tabla.
Pero podemos usar las cláusulas `FIRST` y `AFTER` para controlar en qué posición se coloca una columna.

Por ejemplo, si quisiéramos agregar una columna llamada `favoriteColor` después de la columna `name`, podríamos hacerlo así:

```sql theme={null}
ALTER TABLE events
ADD COLUMN favoriteColor String DEFAULT 'Yellow' AFTER name;
```

Consultemos `events`:

```text theme={null}
┏━━━━━━━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━┓
┃       date ┃ name   ┃ favoriteColor ┃ favoriteNumber ┃
┡━━━━━━━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━┩
│ 2024-12-18 │ Alexey │ Yellow        │             99 │
├────────────┼────────┼───────────────┼────────────────┤
│ 2024-12-18 │ Tyler  │ Yellow        │              7 │
├────────────┼────────┼───────────────┼────────────────┤
│ 2024-12-18 │ Tanya  │ Yellow        │             21 │
└────────────┴────────┴───────────────┴────────────────┘
```

Y, si quisiéramos añadir una columna `favoriteDatabase` y hacer que apareciera primero en la lista, podríamos hacerlo así:

```sql theme={null}
ALTER TABLE events
ADD COLUMN favoriteDatabase String DEFAULT 'ClickHouse' FIRST;
```

```text theme={null}
┏━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━┓
┃ favoriteDatabase ┃       date ┃ name   ┃ favoriteColor ┃ favoriteNumber ┃
┡━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━┩
│ ClickHouse       │ 2024-12-18 │ Tanya  │ Yellow        │             21 │
├──────────────────┼────────────┼────────┼───────────────┼────────────────┤
│ ClickHouse       │ 2024-12-18 │ Alexey │ Yellow        │             99 │
├──────────────────┼────────────┼────────┼───────────────┼────────────────┤
│ ClickHouse       │ 2024-12-18 │ Tyler  │ Yellow        │              7 │
└──────────────────┴────────────┴────────┴───────────────┴────────────────┘
```

Y veamos la definición de la tabla:

```sql theme={null}
SHOW CREATE TABLE events
FORMAT LineAsString
```

```sql theme={null}
CREATE TABLE default.`clickhouse-local-ab404c86-56cc-495b-ad1d-fb343cac3bc0events`
(
    `favoriteDatabase` String DEFAULT 'ClickHouse',
    `date` Date DEFAULT today(),
    `name` String,
    `favoriteColor` String DEFAULT 'Yellow',
    `favoriteNumber` Float64 DEFAULT 21
)
ENGINE = MergeTree
ORDER BY date
```
