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

MariaDB DEFAULT() expliqué

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)

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