

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

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

`CREATE TABLE` définit une nouvelle table.

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

## Colonnes d'identité
<a name="create-table-identity-columns"></a>

**Note**  
Lorsque vous utilisez des colonnes d'identité, la valeur du cache doit être soigneusement prise en compte. Pour plus d'informations, consultez la légende Important sur la [`CREATE SEQUENCE`](create-sequence-syntax-support.md) page.  
Pour obtenir des conseils sur la meilleure façon d'utiliser les colonnes d'identité en fonction des modèles de charge de travail, voir[Utilisation de séquences et de colonnes d'identité](sequences-identity-columns-working-with.md).

La `GENERATED { ALWAYS | BY DEFAULT } AS IDENTITY ( sequence_options )` clause crée la colonne en tant que *colonne d'identité*. Une séquence implicite y sera attachée et dans les lignes nouvellement insérées, la colonne contiendra automatiquement les valeurs de la séquence qui lui est attribuée. Une telle colonne l'est implicitement`NOT NULL`.

Les clauses `ALWAYS` et `BY DEFAULT` déterminent la manière dont les valeurs spécifiées explicitement par l'utilisateur sont traitées dans `UPDATE` les commandes `INSERT` et.

Dans une `INSERT` commande, si elle `ALWAYS` est sélectionnée, une valeur spécifiée par l'utilisateur n'est acceptée que si l'`INSERT`instruction le précise`OVERRIDING SYSTEM VALUE`. Si cette option `BY DEFAULT` est sélectionnée, la valeur spécifiée par l'utilisateur est prioritaire.

Dans une `UPDATE` commande, si elle `ALWAYS` est sélectionnée, toute mise à jour de la colonne vers une valeur autre que `DEFAULT` sera rejetée. Si cette option `BY DEFAULT` est sélectionnée, la colonne peut être mise à jour normalement. (Il n'y a aucune `OVERRIDING` clause pour la `UPDATE` commande.)

La *sequence\$1options* clause peut être utilisée pour remplacer les paramètres de la séquence. Les options disponibles incluent celles indiquées pour[`CREATE SEQUENCE`](create-sequence-syntax-support.md), plus`SEQUENCE NAME name`. Sans`SEQUENCE NAME`, le système choisit un nom inutilisé pour la séquence.