logo

MySQLENUM

Le type de données ENUM dans MySQL est un objet chaîne . Cela nous permet de limiter la valeur choisie dans une liste de valeurs autorisées dans la spécification de la colonne au moment de la création de la table. C'est l'abréviation de énumération , ce qui signifie que chaque colonne peut avoir l'une des valeurs possibles spécifiées. Il utilise index numériques (1, 2, 3…) pour représenter les valeurs de chaîne.

MySQL Le type de données ENUM présente les avantages suivants :

  • Stockage de données compact où la colonne peut avoir un ensemble limité de valeurs possibles spécifiées. Ici, les valeurs de chaîne sont automatiquement utilisées comme index numérique.
  • Il permet des requêtes et des sorties lisibles car les nombres peuvent être à nouveau traduits en chaîne correspondante.
  • Il peut accepter de nombreux types de données comme les entiers, les virgules flottantes, les décimales et les chaînes.

Syntaxe

Voici la syntaxe utilisée pour définir le type de données ENUM dans la colonne :

 CREATE TABLE table_name ( Column1, Column2 ENUM ('value_1','value_2','value_3'), Column3… ); 

Dans la syntaxe ci-dessus, nous n'avons défini que trois valeurs ENUM, mais elles peuvent être augmentées selon nos besoins. Ici, nous devons nous assurer que les valeurs d'énumération doivent toujours rester à l'intérieur du chaîne littérale entre guillemets .

MySQL nous permet de définir le type de données ENUM avec les attributs suivants :

formulaire complet pvr

NON NUL : Par défaut, le type de données ENUM est NULL. Si nous ne voulons pas autoriser les valeurs NULL, il est nécessaire d'utiliser la propriété NOT NULL lors de la spécification de la colonne ENUM.

NUL: C'est un synonyme de DEFAULT NULL et sa valeur d'index est toujours NULL.

DÉFAUT: Lorsqu'une valeur n'est pas spécifiée dans la colonne, le type de données ENUM insère la valeur par défaut. En d'autres termes, si l'instruction INSERT ne fournit pas de valeur pour cette colonne, alors la valeur par défaut sera insérée. L'expression DEFAULT ne permet pas d'insérer de fonction. Le type de données ENUM dans My SQL inclut les valeurs DEFAULT comme NULL ou une chaîne vide ('').

Exemple MySQL ENUM

Comprenons comment fonctionne le type de données ENUM dans MySQL avec l'illustration suivante. Ici, nous allons créer une table nommée ' chemises ' qui contient trois colonnes : id, nom et taille.

énumérations Java

La colonne de taille utilise le type de données ENUM et comporte des tailles petite, moyenne, grande et très grande. MySQL mappe ces membres d'énumération à un index numérique où small=1, medium=2, large=3 et x-large=4 respectivement. Exécutez la requête suivante pour créer une table :

 CREATE TABLE shirts ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(35), size ENUM('small', 'medium', 'large', 'x-large') ); 

Ensuite, nous devons insérer les valeurs dans le tableau. Lors de l'insertion, les valeurs d'énumération peuvent être insérées soit sous forme de chaîne littérale, soit sous forme d'index numériques, et les deux sont identiques. Exécutez l'instruction suivante pour insérer les valeurs dans le tableau :

parcours dans l'ordre
 INSERT INTO shirts(id, name, size) VALUES (1,'t-shirt', 'medium'), (2, 'casual-shirt', 3), (3, 'formal-shirt', 4), (4, 'polo-shirt', 'small'); 

Maintenant, exécutez l'instruction SELECT pour voir les valeurs insérées dans le tableau :

 mysql> SELECT * FROM shirts; 

L'image suivante contient tous les résultats de requête ci-dessus qui contiennent uniquement les valeurs d'énumération sous forme de littéraux de chaîne :

MySQLENUM

Tri ENUM

MySQL trie les valeurs d'énumération en fonction de leurs index numériques qui dépendent de l'ordre dans lequel nous avons inséré les données dans la spécification de la colonne. Par exemple , si nous avons défini l'énumération comme ENUM ('b', 'a', '', 'c'). Ensuite, b vient avant a, la chaîne vide vient avant c (chaîne non vide) et la valeur NULL précède les autres valeurs.

Donc, si nous ne voulons pas obtenir de résultat inattendu avec le type de données ENUM à l'aide de la clause ORDER BY, suivez ces règles :

  • Définissez les valeurs d’énumération par ordre alphabétique.
  • Il s'agit de s'assurer que le nom de la colonne est dans l'ordre lexical plutôt que dans le numéro d'index.

L’exemple suivant explique plus clairement le tri d’énumération. Donc, si vous souhaitez obtenir la taille des chemises dans un ordre spécifique, exécutez l'instruction ci-dessous :

 mysql> SELECT * FROM shirts ORDER BY size DESC; 

Cette requête donnera le résultat ci-dessous où nous pouvons voir que la taille des chemises est par ordre décroissant :

MySQLENUM

Limites du type de données ENUM

Voici les inconvénients du type de données ENUM dans MySQL :

1. Si nous souhaitons modifier les valeurs/membres de l'énumération, cela peut être fait en reconstruisant la table entière à l'aide de la commande ALTER TABLE. Cela nécessite également une utilisation coûteuse de nos ressources et de notre temps.

différence entre le lion et le tigre

2. Nous ne pouvons pas utiliser une expression avec des membres d'énumération. Par exemple, cette instruction CREATE ne s'exécute pas car elle utilise la fonction CONCAT() pour créer des membres d'énumération.

 CREATE TABLE shirts ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(35), size ENUM('small', CONCAT('med','ium'), 'large', 'x-large') ); 

3. Nous ne pouvons pas utiliser la variable utilisateur comme membre d'une énumération. Cela peut être vu dans l'exemple ci-dessous :

 SET @mysize = 'large'; CREATE TABLE shirts ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(35), size ENUM('small', 'medium', @mysize, 'x-large') ); 

4. Il est recommandé de ne pas utiliser les valeurs numériques comme membres d'énumération.

opérateur conditionnel en Java

5. Il est complexe d'obtenir une liste complète d'énumération d'informations car nous devons accéder à la base de données information_schema.

6. Nous pouvons être confrontés à un problème lors du portage d'ENUM vers d'autres SGBDR car de nombreuses bases de données ne prennent pas en charge ce type de données.

7. Nous ne pouvons pas ajouter plus d'attributs aux listes d'énumération.