

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.

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

**Important**  
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).

Une colonne d'identité est une colonne spéciale générée automatiquement à partir d'une séquence implicite. Il peut être utilisé pour générer des valeurs clés. Pour créer une colonne d'identité, utilisez la `GENERATED ... AS IDENTITY` clause dans[`CREATE TABLE`](create-table-syntax-support.md), par exemple :

```
CREATE TABLE people (
    id bigint GENERATED ALWAYS AS IDENTITY (CACHE 70000),
    ...
);
```

ou bien :

```
CREATE TABLE people (
    id bigint GENERATED BY DEFAULT AS IDENTITY (CACHE 70000),
    ...
);
```

Pour plus d’informations, consultez [`CREATE TABLE`](create-table-syntax-support.md).

Si une `INSERT` commande est exécutée sur la table contenant la colonne d'identité et qu'aucune valeur n'est explicitement spécifiée pour la colonne d'identité, une valeur générée par la séquence implicite est insérée. Par exemple, avec les définitions précédentes et en supposant que des colonnes supplémentaires soient appropriées, en écrivant :

```
INSERT INTO people (name, address) VALUES ('A', 'foo');
INSERT INTO people (name, address) VALUES ('B', 'bar');
```

générerait des valeurs pour la `id` colonne commençant à 1 et produirait les données de table suivantes :

```
 id | name | address
----+------+---------
  1 | A    | foo
  2 | B    | bar
```

Vous pouvez également spécifier le mot-clé `DEFAULT` à la place d'une valeur pour demander explicitement la valeur générée par la séquence :

```
INSERT INTO people (id, name, address) VALUES (DEFAULT, 'C', 'baz');
```

De même, le mot-clé `DEFAULT` peut être utilisé dans `UPDATE` les commandes.

Ainsi, à bien des égards, une colonne d'identité se comporte comme une colonne avec une valeur par défaut.

Les clauses `ALWAYS` et la définition `BY DEFAULT` de colonne 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. Ainsi, l'utilisation `BY DEFAULT` entraîne un comportement plus proche des valeurs par défaut, où la valeur par défaut peut être remplacée par une valeur explicite, tout en `ALWAYS` offrant une protection supplémentaire contre l'insertion accidentelle d'une valeur explicite.

Le type de données d'une colonne d'identité doit être l'un des types de données pris en charge par les séquences. (Consultez [`CREATE SEQUENCE`](create-sequence-syntax-support.md).) Les propriétés de la séquence associée peuvent être spécifiées lors de la création d'une colonne d'identité (voir[`CREATE TABLE`](create-table-syntax-support.md)) ou modifiées ultérieurement (voir[`ALTER TABLE`](alter-table-syntax-support.md)).

Une colonne d'identité est automatiquement marquée comme`NOT NULL`. Une colonne d'identité ne garantit toutefois pas l'unicité. (Une séquence renvoie normalement des valeurs uniques, mais une séquence peut être réinitialisée ou des valeurs peuvent être insérées manuellement dans la colonne d'identité, comme indiqué précédemment.) L'unicité devrait être appliquée à l'aide d'une `UNIQUE` contrainte `PRIMARY KEY` or.