FirebirdSQL logo
 DOMAININDEX 

Colonnes basées sur un domaine

Pour définir une colonne, on peut utiliser le domaine décrit précédemment.Si la définition de la colonne est basée sur un domaine, elle peut inclure une nouvelle valeur par défaut, des contraintes CHECK supplémentaires, une suggestion COLLATE qui remplacent les valeurs spécifiées dans la définition du domaine.Une telle définition de colonne peut inclure des contraintes de colonne supplémentaires telles que NOT NULL si le domaine n’en contient pas déjà une.

Important

Notez que si NOT NULL a été spécifié dans la définition du domaine, il n’est pas possible de définir l’admissibilité de NULL au niveau de la colonne.Si vous voulez pouvoir définir des colonnes autorisant la pseudo-définition NULL et ne l’autorisant pas, c’est une bonne pratique de créer un domaine autorisant NULL et de spécifier une contrainte NOT NULL sur les colonnes de la table où cela est nécessaire.

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é.

Voir aussi :

Directive OVERRIDING.