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