

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

`CREATE TABLE` define uma nova tabela.

```
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 [, ... ] ) ]
```

## Colunas de identidade
<a name="create-table-identity-columns"></a>

**nota**  
Ao usar colunas de identidade, é necessário considerar cuidadosamente o valor do cache. Para ter mais informações, consulte o texto explicativo “Importante” na página [`CREATE SEQUENCE`](create-sequence-syntax-support.md).  
Para obter orientações sobre a melhor forma de usar colunas de identidade com base nos padrões de workload, consulte [Trabalhar com sequências e colunas de identidade](sequences-identity-columns-working-with.md).

A cláusula `GENERATED { ALWAYS | BY DEFAULT } AS IDENTITY ( sequence_options )` cria a coluna como uma *coluna de identidade*. Ela terá uma sequência implícita anexada a ela e, nas linhas recém-inseridas, a coluna terá automaticamente valores da sequência atribuída a ela. Essa coluna é implicitamente `NOT NULL`.

As cláusulas `ALWAYS` e `BY DEFAULT` determinam como os valores especificados pelo usuário são tratados explicitamente nos comandos `INSERT` e `UPDATE`.

Em um comando `INSERT`, se `ALWAYS` estiver selecionado, um valor especificado pelo usuário só será aceito se a instrução `INSERT` especificar`OVERRIDING SYSTEM VALUE`. Se `BY DEFAULT` estiver selecionado, o valor especificado pelo usuário terá precedência.

Em um comando `UPDATE`, se `ALWAYS` estiver selecionado, qualquer atualização da coluna para qualquer valor diferente de `DEFAULT` será rejeitada. Se `BY DEFAULT` estiver selecionado, a coluna poderá ser atualizada normalmente. (Não há nenhuma cláusula `OVERRIDING` para o comando `UPDATE`.)

A cláusula *sequence\$1options* pode ser usada para substituir os parâmetros da sequência. As opções disponíveis incluem aquelas mostradas para [`CREATE SEQUENCE`](create-sequence-syntax-support.md), mais `SEQUENCE NAME name`. Sem `SEQUENCE NAME`, o sistema escolherá um nome não utilizado para a sequência.