Colonnes d'identité (auto-incrémentation)

La colonne d'identité est une colonne associée au générateur de séquence interne. Les colonnes d'identité peuvent être définies soit par la phrase GENERATED BY DEFAULT AS IDENTITY, soit par la phrase GENERATED ALWAYS AS IDENTITY.

Si la colonne d'identité est spécifiée comme Générée par défaut, alors sa valeur sera incrémentée et utilisée comme valeur par défaut à chaque insertion, seulement si la valeur de cette colonne n'est pas explicitement spécifiée.

Pour utiliser la valeur par défaut générée, vous devez soit spécifier le mot clé DEFAULT lors de l'insertion dans la colonne d'identité, soit simplement ne pas mentionner la colonne d'identité dans la liste des colonnes à insérer. Sinon, la valeur que vous avez spécifiée sera utilisée.

Example 1. Colonne définie comme GENERATED BY DEFAULT AS IDENTITY
CREATE TABLE greetings (
  id INT GENERATED BY DEFAULT AS IDENTITY,
  name CHAR(50));

-- specify value "1":
INSERT INTO greetings VALUES (1, 'hi');

-- use generated default
INSERT INTO greetings VALUES (DEFAULT, 'salut');

-- use generated default
INSERT INTO greetings(ch) VALUES ('bonjour');
Note

Ce comportement peut être modifié dans l'instruction INSERT si la directive `OVERRIDING USER VALUE' est spécifiée. Voir OVERRIDING directive pour plus de détails.

Si la colonne d'identité est spécifiée comme GENERATED ALWAYS', sa valeur s'incrémentera chaque fois qu'elle sera insérée. Si vous tentez d'attribuer explicitement une valeur de colonne d'identité dans l'instruction `INSERT, vous obtiendrez un message d'erreur. Dans l'instruction INSERT, vous pouvez spécifier le mot-clé DEFAULT au lieu d'une valeur pour la colonne d'identité.

create table greetings (
  id INT GENERATED ALWAYS AS IDENTITY,
  name CHAR(50));

INSERT INTO greetings VALUES (DEFAULT, 'hello');

INSERT INTO greetings(ch) VALUES ('bonjour');
Note

Ce comportement peut être modifié dans l'instruction INSERT si la directive OVERRIDING SYSTEM VALUE est spécifiée. Voir directive OVERRIDING pour plus de détails.

La phrase optionnelle START WITH vous permet de spécifier une valeur de départ autre que zéro. La phrase INCREMENT [BY]CREATE TABLE, IDENTITY, INCREMENT BY définit la valeur d'incrémentation. La valeur de l'incrément doit être différente de 0. Par défaut, la valeur de l'incrément est de 1.

règles
  • Le type de données de la colonne d'identité doit être un nombre entier avec une échelle de zéro. Les types acceptables sont SMALLINT, INTEGER, BIGINT, NUMERIC(x,0) et DECIMAL(x,0) ;

  • La colonne d'identification ne peut pas avoir les valeurs DEFAULT et COMPUTED.

Note
  • Une colonne d'identité peut être modifiée pour devenir une colonne normale. Une colonne normale ne peut pas être modifiée pour devenir une colonne d'identité.

  • Les colonnes d'identification sont implicitement des colonnes `NOT NULL'.

  • L'unicité n'est pas automatiquement garantie. Les restrictions UNIQUE ou PRIMARY KEY sont nécessaires pour garantir l'unicité.