El tipo de datos ENUM en MySQL es un objeto de cadena . Nos permite limitar el valor elegido de una lista de valores permitidos en la especificación de la columna en el momento de la creación de la tabla. es corto para enumeración , lo que significa que cada columna puede tener uno de los valores posibles especificados. Usa índices numéricos (1, 2, 3…) para representar valores de cadena.
mysql El tipo de datos ENUM contiene las siguientes ventajas:
- Almacenamiento de datos compacto donde la columna puede tener un conjunto limitado de valores posibles especificados. Aquí, los valores de cadena se utilizan automáticamente como índice numérico.
- Permite consultas y resultados legibles porque los números se pueden traducir nuevamente a la cadena correspondiente.
- Puede aceptar muchos tipos de datos como enteros, de punto flotante, decimales y de cadena.
Sintaxis
La siguiente es la sintaxis utilizada para definir el tipo de datos ENUM en la columna:
CREATE TABLE table_name ( Column1, Column2 ENUM ('value_1','value_2','value_3'), Column3… );
En la sintaxis anterior, hemos definido solo tres valores ENUM, pero se pueden aumentar según nuestras necesidades. Aquí, debemos asegurarnos de que los valores de enumeración siempre deben mantenerse dentro del literal de cadena entre comillas .
MySQL nos permite definir el tipo de datos ENUM con los siguientes atributos:
Sin señal de entrada
NO NULO: De forma predeterminada, el tipo de datos ENUM es NULL. Si no queremos permitir valores NULL, es necesario utilizar la propiedad NOT NULL al especificar la columna ENUM.
NULO: Es sinónimo de DEFAULT NULL y su valor de índice siempre es NULL.
POR DEFECTO: Cuando no se especifica un valor en la columna, el tipo de datos ENUM inserta el valor predeterminado. En otras palabras, si la instrucción INSERT no proporciona un valor para esta columna, se insertará el valor predeterminado. La expresión DEFAULT no permite insertar función. El tipo de datos ENUM en My SQL incluye los valores DEFAULT como NULL o una cadena vacía ('').
Ejemplo de ENUM de MySQL
Entendamos cómo funciona el tipo de datos ENUM en MySQL con la siguiente ilustración. Aquí vamos a crear una tabla llamada ' camisas ' que contiene tres columnas: id, nombre y tamaño.
La columna de tamaño utiliza el tipo de datos ENUM y tiene tamaños pequeño, mediano, grande y extragrande. MySQL asigna estos miembros de enumeración a un índice numérico donde pequeño = 1, mediano = 2, grande = 3 y x-grande = 4 respectivamente. Ejecute la siguiente consulta para crear una tabla:
CREATE TABLE shirts ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(35), size ENUM('small', 'medium', 'large', 'x-large') );
A continuación, necesitamos insertar los valores en la tabla. Durante la inserción, los valores de enumeración se pueden insertar como la cadena literal o sus índices numéricos, y ambos son iguales. Ejecute la siguiente declaración para insertar los valores en la tabla:
cómo inicializar una matriz en java
INSERT INTO shirts(id, name, size) VALUES (1,'t-shirt', 'medium'), (2, 'casual-shirt', 3), (3, 'formal-shirt', 4), (4, 'polo-shirt', 'small');
Ahora, ejecute la instrucción SELECT para ver los valores insertados en la tabla:
mysql> SELECT * FROM shirts;
La siguiente imagen contiene todos los resultados de la consulta anterior que contienen los valores de enumeración solo en cadenas literales:
Clasificación ENUM
MySQL ordena los valores de enumeración en función de sus índices numéricos que dependen del orden en el que hemos insertado los datos en la especificación de la columna. Por ejemplo , si hemos definido la enumeración como ENUM ('b', 'a', '', 'c'). Entonces, b va antes de a, la cadena vacía va antes de c (cadena no vacía) y el valor NULL va antes de otros valores.
Entonces, si no queremos obtener resultados inesperados con el tipo de datos ENUM usando la cláusula ORDER BY, siga estas reglas:
'cuanto es 10 de 100'
- Defina los valores de enumeración en orden alfabético.
- Es para asegurarse de que el nombre de la columna esté en orden léxico en lugar de número de índice.
El siguiente ejemplo explica la clasificación por enumeración con mayor claridad. Entonces, si desea obtener el tamaño de las camisetas en un orden específico, ejecute la siguiente instrucción:
mysql> SELECT * FROM shirts ORDER BY size DESC;
Esta consulta dará el resultado siguiente, donde podemos ver que el tamaño de las camisas está en orden descendente:
Limitaciones del tipo de datos ENUM
Las siguientes son las desventajas del tipo de datos ENUM en MySQL:
1. Si queremos modificar los valores/miembros de la enumeración, podemos hacerlo reconstruyendo la tabla completa usando el comando ALTER TABLE. También hace un uso costoso de nuestros recursos y tiempo.
Java privado vs público
2. No podemos utilizar una expresión con miembros de enumeración. Por ejemplo, esta instrucción CREATE no se ejecuta porque utiliza la función CONCAT() para crear miembros de enumeración.
CREATE TABLE shirts ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(35), size ENUM('small', CONCAT('med','ium'), 'large', 'x-large') );
3. No podemos utilizar la variable de usuario como miembro de la enumeración. Se puede ver en el siguiente ejemplo:
SET @mysize = 'large'; CREATE TABLE shirts ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(35), size ENUM('small', 'medium', @mysize, 'x-large') );
4. Se recomienda que no utilicemos los valores numéricos como miembros de la enumeración.
5. Es complejo obtener una lista de enumeración de información completa porque necesitamos acceder a la base de datos information_schema.
6. Es posible que enfrentemos un problema durante la migración de ENUM a otros RDBMS porque muchas bases de datos no admiten este tipo de datos.
7. No podemos agregar más atributos a las listas de enumeración.