Dans MariaDB, DEFAULT()
est une fonction intégrée qui renvoie la valeur par défaut d'une colonne de tableau.
Si la colonne n'a pas de valeur par défaut et qu'elle est NULLABLE
, puis NULL
est retourné. Si la colonne n'a pas de valeur par défaut et qu'elle n'est pas NULLABLE
, une erreur est renvoyée.
Syntaxe
La syntaxe ressemble à ceci :
DEFAULT(col_name)
Où col_name
est le nom de la colonne pour laquelle renvoyer la valeur par défaut.
Il peut également être utilisé sans les parenthèses et l'argument dans certains cas :
DEFAULT
Cette syntaxe peut être utilisée pour définir explicitement une colonne sur sa valeur par défaut.
Exemple
Voici un exemple pour illustrer le fonctionnement de la fonction.
Supposons que nous créons une table comme celle-ci :
CREATE TABLE guest_meals (
guest_id INT NOT NULL,
meal VARCHAR(255) DEFAULT 'Salad',
special_request VARCHAR(255),
PRIMARY KEY (guest_id)
);
Ici, nous définissons une valeur par défaut pour le meal
colonne. Plus précisément, nous avons utilisé DEFAULT 'Salad'
pour définir le repas par défaut sur Salad
.
Ceci utilise le DEFAULT
clause de la CREATE TABLE
déclaration. Bien que lié à notre objectif ici (il définit la valeur par défaut pour une colonne), il ne doit pas être confondu avec le DEFAULT()
fonction sur laquelle porte cet article.
Insérons maintenant quelques lignes :
INSERT INTO guest_meals (guest_id) VALUES (1);
INSERT INTO guest_meals (guest_id, meal) VALUES (2, 'Fish');
INSERT INTO guest_meals (guest_id, meal) VALUES (3, 'Burrito');
INSERT INTO guest_meals (guest_id, meal, special_request) VALUES (4, 'Pasta', 'Hot');
INSERT INTO guest_meals (guest_id, special_request) VALUES (5, 'Vegan');
Certaines de ces entrées indiquent explicitement quel repas le client souhaite, tandis que d'autres ne le font pas. Ceux qui ne le font pas utiliseront simplement le repas par défaut (Salad
).
Alors maintenant, sélectionnons ces lignes dans le tableau. Nous inclurons le DEFAULT()
fonction dans notre sélection :
SELECT
guest_id,
DEFAULT(meal),
meal,
DEFAULT(special_request),
special_request
FROM guest_meals;
Résultat :
+----------+---------------+---------+--------------------------+-----------------+ | guest_id | DEFAULT(meal) | meal | DEFAULT(special_request) | special_request | +----------+---------------+---------+--------------------------+-----------------+ | 1 | Salad | Salad | NULL | NULL | | 2 | Salad | Fish | NULL | NULL | | 3 | Salad | Burrito | NULL | NULL | | 4 | Salad | Pasta | NULL | Hot | | 5 | Salad | Salad | NULL | Vegan | +----------+---------------+---------+--------------------------+-----------------+
Le DEFAULT(meal)
renvoie les valeurs par défaut et la colonne meal
colonne renvoie les valeurs réelles qui ont été insérées.
De même, le DEFAULT(special_request)
colonne renvoie les valeurs par défaut pour cette colonne, et la special_request
colonne renvoie les valeurs réelles qui ont été insérées.
Concernant la special_request
colonne, nous n'avons pas défini de valeur par défaut pour cette colonne et le résultat est donc NULL
. Notez que si la colonne n'était pas NULLABLE
, alors nous aurions une erreur (voir ci-dessous). Mais la colonne est NULLABLE
, et donc la valeur par défaut de NULL
retourné.
Insérer explicitement la valeur par défaut
Vous pouvez utiliser le DEFAULT
mot-clé sans parenthèses pour insérer explicitement la valeur par défaut dans une colonne.
Voici un exemple :
INSERT INTO guest_meals (guest_id, meal, special_request)
VALUES (6, DEFAULT, DEFAULT);
Maintenant, sélectionnons cette ligne :
SELECT
guest_id,
DEFAULT(meal),
meal,
DEFAULT(special_request),
special_request
FROM guest_meals
WHERE guest_id = 6;
Résultat :
+----------+---------------+-------+--------------------------+-----------------+ | guest_id | DEFAULT(meal) | meal | DEFAULT(special_request) | special_request | +----------+---------------+-------+--------------------------+-----------------+ | 6 | Salad | Salad | NULL | NULL | +----------+---------------+-------+--------------------------+-----------------+
Dans les deux cas, il a inséré la valeur par défaut pour la colonne respective. Pour le meal
colonne, c'était Salad
. Pour la special_request
colonne, c'était NULL
.
Colonnes non nullables
Comme mentionné, essayer d'obtenir la valeur par défaut à partir d'un non-NULLABLE
colonne qui n'a pas de valeur par défaut génère une erreur.
Exemple :
SELECT DEFAULT(guest_id)
FROM guest_meals;
Résultat :
ERROR 1364 (HY000): Field 'guest_id' doesn't have a default value
Lorsque nous avons créé la table, nous n'avons pas fourni de valeur par défaut pour le guest_id
colonne, et nous la définissons également sur NOT NULL
. Pour cette raison, nous obtenons une erreur lorsque nous essayons de renvoyer sa valeur par défaut.
Colonnes entières utilisant AUTO_INCREMENT
Pour les colonnes d'entiers utilisant AUTO_INCREMENT
, la valeur de retour est 0
.
Par exemple, créons une table avec un AUTO_INCREMENT
colonne :
CREATE TABLE guest (
guest_id INT NOT NULL AUTO_INCREMENT,
guest_name VARCHAR(255) NOT NULL,
PRIMARY KEY (guest_id)
);
Le guest_id
la colonne utilise un INT
type de données (entier), et il est défini sur AUTO_INCREMENT
.
Insérez maintenant quelques lignes :
INSERT INTO guest (guest_name) VALUES ('Homer');
INSERT INTO guest (guest_name) VALUES ('Bart');
INSERT INTO guest (guest_name) VALUES ('Marge');
Maintenant, renvoyons la valeur par défaut du guest_id
colonne :
SELECT
DEFAULT(guest_id),
guest_id
FROM guest;
Résultat :
+-------------------+----------+ | DEFAULT(guest_id) | guest_id | +-------------------+----------+ | 0 | 1 | | 0 | 2 | | 0 | 3 | +-------------------+----------+
Le DEFAULT(guest_id)
colonne indique que la valeur par défaut est 0
pour toutes les rangées. Le guest_id
la colonne montre la valeur réelle qui a été insérée (qui a été générée par le AUTO_INCREMENT
).