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;
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