

# `CREATE TABLE`
<a name="create-table-syntax-support"></a>

`CREATE TABLE` define una nueva tabla.

```
CREATE TABLE [ IF NOT EXISTS ] table_name ( [
  { column_name data_type [ column_constraint [ ... ] ]
    | table_constraint
    | LIKE source_table [ like_option ... ] }
    [, ... ]
] )

where column_constraint is:

[ CONSTRAINT constraint_name ]
{ NOT NULL |
  NULL |
  CHECK ( expression )|
  DEFAULT default_expr |
  GENERATED ALWAYS AS ( generation_expr ) STORED |
  GENERATED { ALWAYS | BY DEFAULT } AS IDENTITY ( sequence_options ) |
  UNIQUE [ NULLS [ NOT ] DISTINCT ] index_parameters |
  PRIMARY KEY index_parameters |

and table_constraint is:

[ CONSTRAINT constraint_name ]
{ CHECK ( expression ) |
  UNIQUE [ NULLS [ NOT ] DISTINCT ] ( column_name [, ... ] ) index_parameters |
  PRIMARY KEY ( column_name [, ... ] ) index_parameters |

and like_option is:

{ INCLUDING | EXCLUDING } { COMMENTS | CONSTRAINTS | DEFAULTS | GENERATED | IDENTITY | INDEXES | STATISTICS | ALL }

index_parameters in UNIQUE, and PRIMARY KEY constraints are:
[ INCLUDE ( column_name [, ... ] ) ]
```

## Columnas de identidad
<a name="create-table-identity-columns"></a>

**nota**  
Cuando se utilizan columnas de identidad, se debe considerar con cuidado el valor de la caché. Para obtener más información, consulte el aviso Importante de la página [`CREATE SEQUENCE`](create-sequence-syntax-support.md).  
Para obtener orientación sobre la mejor manera de utilizar las columnas de identidad en función de los patrones de carga de trabajo, consulte [Trabajar con secuencias y columnas de identidad](sequences-identity-columns-working-with.md).

La cláusula `GENERATED { ALWAYS | BY DEFAULT } AS IDENTITY ( sequence_options )` crea la columna como una *columna de identidad*. Tendrá una secuencia implícita asociada y, en las filas recién insertadas, la columna tendrá automáticamente los valores de la secuencia que se le haya asignado. Dicha columna es implícitamente `NOT NULL`.

Las cláusulas `ALWAYS` y `BY DEFAULT` determinar cómo se gestionan explícitamente los valores especificados por el usuario en los comandos `INSERT` y `UPDATE`.

En un comando `INSERT`, si se selecciona `ALWAYS`, solo se acepta un valor especificado por el usuario si la instrucción `INSERT` especifica `OVERRIDING SYSTEM VALUE`. Si se selecciona `BY DEFAULT`, prevalece el valor especificado por el usuario.

En un comando `UPDATE`, si se selecciona `ALWAYS`, cualquier actualización de la columna a un valor distinto de `DEFAULT` se rechazará. Si se selecciona `BY DEFAULT`, la columna se puede actualizar de forma normal. (No hay una cláusula `OVERRIDING` para el comando `UPDATE`).

La cláusula *sequence\$1options* se puede utilizar para anular los parámetros de la secuencia. Las opciones disponibles incluyen las que se muestran para [`CREATE SEQUENCE`](create-sequence-syntax-support.md) más `SEQUENCE NAME name`. Sin `SEQUENCE NAME`, el sistema elige un nombre no utilizado para la secuencia.