FirebirdSQL logo
 DOMAININDEX 

Valeur par défaut

La clause facultative DEFAULT vous permet de spécifier une valeur par défaut pour une colonne de table.Cette valeur sera placée dans la colonne de la table lors de l’exécution de l’instruction INSERT si aucune valeur n’est spécifiée pour cette colonne.La valeur par défaut peut être un littéral compatible avec le type, une valeur NULL inconnue, ou une variable contextuelle dont le type est compatible avec le type de la colonne.Si aucune valeur par défaut n’est explicitement définie, une valeur vide, NULL, est supposée.L’utilisation d’expressions dans la valeur par défaut n’est pas autorisée.

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.

Champs calculés

Les champs calculables peuvent être définis avec une phrase COMPUTED [BY] ou GENERATED ALWAYS AS (selon la norme SQL-2003). Ils sont équivalents en termes de signification.Pour les champs évaluables, il n’est pas nécessaire de décrire le type de données (mais cela est permis), le SGBD calcule un type approprié à la suite de l’analyse de l’expression.L’expression nécessite de spécifier une opération correcte pour les types de données de la colonne qu’elle contient.Si vous spécifiez explicitement un type de colonne pour le champ à évaluer, le résultat du calcul est converti au type spécifié, c’est-à-dire que le résultat d’une expression numérique peut être édité sous forme de chaîne de caractères, par exemple.L’expression est évaluée pour chaque ligne des données sélectionnées si l’instruction de sélection de données SELECT contient une telle colonne.

Tip

Au lieu d’utiliser une colonne calculée, dans certains cas, il est judicieux d’utiliser une colonne ordinaire dont la valeur est calculée dans les déclencheurs d’ajout et de mise à jour de données.Cela peut réduire la performance de l’insertion/modification des enregistrements, mais améliorera la performance de l’extraction des données.