SQLite
 sql >> Base de données >  >> RDS >> SQLite

Définir une valeur par défaut pour une colonne dans SQLite :contrainte DEFAULT

Lors de la création d'une table dans SQLite, vous avez la possibilité d'ajouter des contraintes à chaque colonne.

Une telle contrainte est le DEFAULT contrainte.

Le DEFAULT La contrainte vous permet de spécifier une valeur à utiliser dans le cas où aucune valeur n'est fournie pour cette colonne lorsqu'une nouvelle ligne est insérée.

Si vous ne le faites pas utiliser un DEFAULT clause, alors la valeur par défaut pour une colonne est NULL .

Valeurs par défaut possibles

La valeur par défaut explicite d'un DEFAULT contrainte peut être l'une des suivantes :

  • une constante de chaîne
  • une constante blob
  • un numéro signé
  • toute expression constante entre parenthèses.
  • CURRENT_TIME
  • CURRENT_DATE
  • CURRENT_TIMESTAMP
  • NULL

Exemple

Voici un exemple pour illustrer.

CREATE TABLE Products( 
    ProductId INTEGER PRIMARY KEY, 
    ProductName,
    Price DEFAULT 0.00
);

Ici, j'ai ajouté un DEFAULT contrainte sur le Prix colonne. Dans ce cas, la valeur par défaut est 0.00 .

Maintenant, lorsque j'insère une nouvelle ligne sans spécifier de valeur pour le Prix colonne, la valeur par défaut est utilisée.

INSERT INTO Products ( ProductId, ProductName ) 
VALUES (1, 'Long Weight');

SELECT * FROM Products;

Résultat :

ProductId   ProductName  Price     
----------  -----------  ----------
1           Long Weight  0.0       

Valeurs explicites

Bien sûr, la valeur par défaut n'est utilisée que lorsque vous ne fournissez pas explicitement de valeur. Si vous le faites, cette valeur est utilisée à la place.

Voici un autre exemple. Cette fois, je fournis explicitement une valeur pour ce Prix colonne.

INSERT INTO Products ( ProductId, ProductName, Price ) 
VALUES (2, 'Left-Handed Screwdriver', 19.99);

SELECT * FROM Products;

Résultat :

ProductId   ProductName                Price     
----------  -------------------------  ----------
1           Long Weight                0.0       
2           Left-Handed Screwdriver    19.99     

NULL explicites

L'exemple précédent s'applique également à NULL explicitement fourni valeurs.

Pour le démontrer, voici ce qui se passe si j'insère explicitement NULL dans le Prix colonne.

INSERT INTO Products ( ProductId, ProductName, Price ) 
VALUES (3, 'Elbow Grease', NULL);

SELECT * FROM Products;

Résultat :

ProductId   ProductName               Price     
----------  ------------------------  ----------
1           Long Weight               0.0       
2           Left-Handed Screwdriver   19.99     
3           Elbow Grease                        

Cette fois, le Prix la colonne est NULL , car c'est ce que j'ai explicitement inséré dans cette colonne.

Pour éviter que cela ne se produise, consultez Comment convertir les valeurs NULL en valeur par défaut de la colonne lors de l'insertion de données dans SQLite.

Horodatage par défaut

Dans cet exemple, je crée une autre table. Cette fois, j'ai défini la valeur par défaut sur l'horodatage actuel.

CREATE TABLE Types( 
    TypeId INTEGER PRIMARY KEY, 
    Type,
    DateInserted DEFAULT CURRENT_TIMESTAMP
);

Et maintenant quelques données.

INSERT INTO Types (Type) 
VALUES ( 'Hardware' );

SELECT * FROM Types;

Résultat :

TypeId      Type        DateInserted       
----------  ----------  -------------------
1           Hardware    2020-06-05 00:21:57

L'horodatage est inséré comme prévu.

Valeur d'incrémentation automatique en tant que valeur par défaut

Notez que dans l'exemple précédent, je n'ai pas non plus fourni de valeur pour le TypeId colonne, mais il a généré automatiquement une valeur par défaut de toute façon.

Dans ce cas, la valeur par défaut n'était pas due à un DEFAULT contrainte. Cela était dû au fait que la colonne est une colonne de clé primaire qui a été créée à l'aide de INTEGER PRIMARY KEY . Lorsque vous définissez une colonne à l'aide de INTEGER PRIMARY KEY , la colonne devient automatiquement une colonne auto-incrémentée.

Pour illustrer cela plus en détail, voici ce qui se passe si j'insère d'autres lignes.

INSERT INTO Types (Type) 
VALUES 
  ( 'Software' ),
  ( 'Hardcopy' );

SELECT * FROM Types;

Résultat :

TypeId      Type        DateInserted       
----------  ----------  -------------------
1           Hardware    2020-06-05 00:21:57
2           Software    2020-06-05 00:22:14
3           Hardcopy    2020-06-05 00:22:14

Pour plus d'informations sur les colonnes à incrémentation automatique, consultez Fonctionnement d'AUTOINCREMENT dans SQLite et Comment créer une colonne à incrémentation automatique dans SQLite.

Expressions comme valeur par défaut

Vous pouvez également utiliser une expression constante comme valeur par défaut. Pour ce faire, l'expression doit être placée entre parenthèses.

Voici un exemple.

CREATE TABLE Person( 
    PersonId INTEGER PRIMARY KEY, 
    Name,
    Entered DEFAULT (round(julianday('now'))),
    Deadline  DEFAULT (round(julianday('now')) + 10.5)
);

Et maintenant quelques données.

INSERT INTO Person (Name) 
VALUES ( 'Fred' );

SELECT * FROM Person;

Résultat :

PersonId    Name        Entered     Deadline  
----------  ----------  ----------  ----------
1           Fred        2459006.0   2459016.5 

Notez que l'expression doit être une expression constante. Une expression constante est une expression qui ne contient que des constantes.

Si vous essayez d'utiliser une expression qui ne contient pas que des constantes, vous obtiendrez une erreur.

CREATE TABLE Person( 
    PersonId INTEGER PRIMARY KEY, 
    FirstName,
    LastName,
    UserName DEFAULT (FirstName || LastName)
);

Résultat :

Error: default value of column [UserName] is not constant