Enumerador (Enum) en MySQL

Un ENUM es un objeto de string cuyo valor se decide a partir de un conjunto de literales permitidos (valores) que se definen explícitamente en el momento de la creación de la columna.

Beneficios del tipo de datos Enum:

  • Se requiere un almacenamiento de datos sucinto para almacenar datos en columnas de tamaño limitado. Las strings que pasa a los tipos de datos de enumeración obtienen implícitamente la numeración numérica.
     
  • También proporciona consultas legibles y resultados fácilmente porque los números se pueden volver a traducir al resultado de la string correspondiente.
     

Sintaxis de enumeración para columnas:

CREATE TABLE table_name (
  col...
  col ENUM ('value_1','value_2','value_3', ....),
  col...
);

MySQL nos permite definir el tipo de datos ENUM con los siguientes tres atributos:

  • NOT NULL: 
    si no queremos valores NULL, es necesario utilizar la propiedad NOT NULL en la columna ENUM.
  • NULL: 
    es un sinónimo de DEFAULT NULL y su valor de índice siempre es NULL.
  • DEFAULT: 
    de forma predeterminada, el tipo de datos ENUM es NULL, si el usuario no desea pasarle ningún valor.
     

Ejemplo:
supongamos que queremos almacenar los datos de los estudiantes en la tabla Student_grade para almacenar las calificaciones de los estudiantes en las columnas correspondientes (Alto, Medio, Bajo). Usamos la declaración de prioridad para asignar la prioridad a la columna Enum .

CREATE TABLE Student_grade(
id INT PRIMARY KEY AUTO_INCREMENT, Grade VARCHAR(250) NOT NULL,
priority ENUM('Low', 'Medium', 'High') NOT NULL
);

La columna priorizada aceptará solo tres columnas. Aquí, el orden de numeración Bajo->1, Medio->2, Alto->3.

Insertar datos en la tabla –

  • Inserte una nueva fila en la tabla llamada Student_grade , la declaración es la siguiente:
INSERT INTO Student_grade(Grade, priority)
VALUES('Good grades', 'High');
  • En lugar de usar los valores de enumeración, también puede usar los índices numéricos para insertar los valores en la columna Enum de la tabla:
INSERT INTO Student_grade(Grade, priority)
VALUES('Poor grades', 1);
// Here we use 1 instead of using 'Low' enumeration value, 
since 1 is mapped to 'Low' implicitly.
  • Agreguemos más filas a la tabla Student_grade –
INSERT INTO Student_grade(Grade, priority)
VALUES('Mediocre grade', 'Medium');

INSERT INTO Student_grade(Grade)
VALUES('Poor grades',1);

INSERT INTO Student_grade(Grade)
VALUES('Good grades','High');

Nota: la columna ENUM también puede almacenar valores NULL si se define como una columna que admite valores NULL.

Producción :

  • La siguiente declaración trajo todos los resultados de los estudiantes de altas calificaciones:
SELECT * FROM Student_grade
WHERE priority = 'High';
  • El mismo resultado que puede obtener a través de esta consulta de My SQL:
SELECT * FROM Student_grade
WHERE priority = 3;

  • La consulta a continuación selecciona Student_grade y los ordena por prioridad de mayor a menor:
SELECT Grade, priority FROM Student_grade
ORDER BY priority DESC;

Ordenar_datos

Desventajas de MySQL ENUM:
 

  • Si está pensando en modificar los miembros de la enumeración, debe reconstruir toda la tabla con el comando ALTER TABLE, que tiene bastante sobrecarga en términos de tiempo y recursos utilizados.
     
  • Es muy complejo obtener la lista de enumeración completa porque, en ese caso, debe acceder a la base de datos inform_schema:
SELECT colmn_type FROM inform_schema 
WHERE TABLE_NAME = 'Student_grade' AND COLUMN_NAME = 'priority';
  • Portarlo a otro RDBMS podría ser una tarea difícil porque ENUM no es un tipo de datos estándar de SQL y no hay muchos sistemas de bases de datos que lo admitan.
     
  • No es posible insertar más valores en la columna enumerada. Supongamos que está interesado en insertar un acuerdo basado en el servicio para cada prioridad, por ejemplo, Alta (48 horas), Media (4-3 días), Baja (1 semana), pero no es tan fácil como parece y pragmático con datos ENUM escribe.
     
  • La lista enumerada no es reutilizable. Porque si desea crear una nueva tabla llamada «Emp-List» y está interesado en reutilizar su lista de prioridades, entonces no es posible.
     

Publicación traducida automáticamente

Artículo escrito por madhav_mohan y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *