Home Ciencia y Tecnología Navegar por tipos de datos MySQL: conjuntos y enums

Navegar por tipos de datos MySQL: conjuntos y enums

37
0

Introducción

Este artículo continúa mi serie sobre los tipos de datos MySQL. Anteriormente, cubrí tipos numéricos y tipos de fecha/hora. Este artículo se centra en SET y ENUM Tipos, tipos de datos especializados que se pueden usar para listas limitadas de datos y hacen que los esquemas sean más comprensibles, pero también pueden causar problemas si no se usan cuidadosamente. Primero veré lo que son, luego daré ejemplos de errores comunes y cómo evitarlos.

¿Qué son los tipos de Enum y Set?

Enumer

  • Un objeto de cadena que puede contener un valor único elegido de una lista predefinida.
  • Caso de uso de ejemplo: estado de pedido ('pending', 'paid', 'shipped', 'cancelled').
  • Almacenado internamente como un índice entero (basado en 1).
  • Admite hasta 65,535 elementos (como SMALLINT).

COLOCAR

  • Un objeto de cadena que puede contener cualquier combinación de valores de una lista predefinida.
  • Caso de uso de ejemplo: permisos de usuario ('learn', 'write', 'delete').
  • Almacenado internamente como un mapa de bits (cada bit representa si hay un valor presente).
  • Admite hasta 64 elementos (como BIT(64)).

Sintaxis y ejemplos

Aquí hay una tabla de ejemplo para pedidos con campo de estado que se usa ENUM Escriba para especificar los estados de pedido disponibles:

Crear pedidos de tabla (ID int Auto_incement Key primario, estado enum (‘pendiente’, ‘pagado’, ‘enviado’, ‘cancelado’) no nulo predeterminado ‘pendiente’));

Para insertar dos órdenes en la tabla:

Insertar en órdenes () valores (); Insertar en los valores de órdenes (estado) (‘pagado’);

Seleccionar todas las filas con una representación numérica adicional del campo de estado:

Seleccione ID, estado, estado+0 de pedidos; +—-+———+———-+| ID | Estado | estado+0 | +—-+———+———-+| 1 | pendiente | 1 | | 2 | pagado | 2 | +—-+———+———-+2 filas en el set (0.000 segundos)

Aquí hay una tabla de ejemplo con SET campo:

Crear usuarios de tabla (ID int Auto_Increment Key primario, conjunto de permisos (‘Learn’, ‘escribir’, ‘eliminar’) no nulo);

Insertar un usuario con múltiples permisos:

Insertar en valores de usuarios (permisos) (‘leer, escribir’);

Trampas comunes y cómo evitarlos

Por supuesto, puedo comenzar señalando que si está utilizando versiones o configuraciones MySQL muy antiguas que no son lo suficientemente estrictos, puede pasar por alto los errores relacionados con los valores de escritura que no están incluidos en la definición de campo. En este caso, se escribirá un valor vacío en el campo. Pero espero que puedas usar versiones MySQL bastante recientes. También espero que comprenda estas limitación de rango de tipos de campo y no intente almacenar más de 64 valores en conjuntos.

Por lo tanto, el problema más común está relacionado con los cambios en las definiciones de campo. Think about que alguien agregue un nuevo valor a la mitad del ENUM Lista de variantes:

Crear pedidos de tabla (ID int Auto_incement Key primario, estado enum (‘pendiente’, ‘pagado’, ‘enviado’) no nulo predeterminado ‘pendiente’); Insertar en los valores de órdenes (estado) (‘pagado’); Seleccione ID, estado, estado+0 de pedidos; +—-+———+———-+| ID | Estado | estado+0 | +—-+———+———-+| 1 | pagado | 2 | +—-+———+———-+1 filas en set (0.000 segundos) Alter Tabla Orders Modify Standing enum (‘pendiente’, ‘aceptado’, ‘pagado’, ‘enviado’) no nulo predeterminado ‘pendiente’;

Mientras mysql almacena ENUM Campos como enteros internamente, esto es lo que tendremos:

Seleccione ID, estado, estado+0 de pedidos;

+—-+———-+———-+| ID | Estado | estado+0 | +—-+———-+———-+| 1 | aceptado | 2 | +—-+———-+———-+1 filas en el set (0,000 segundos)

¡Vaya! Debe recordar que reordenar o insertar una nueva variante en cualquier lugar, pero el ultimate cambia la asignación de índice, lo que lleva a los desajustes de datos.

La segunda cosa que quiero mencionar es que, mientras MySQL almacena enumera y se establece como enteros, los clasifica y los compara como cadenas recopiladas al seleccionar. Esto puede sorprender a los desarrolladores esperando un orden numérico.

Conclusión

ENUM y SET Puede ser herramientas poderosas para restringir los valores directamente en su esquema. Pero con su conveniencia vienen advertencias en torno a los pedidos, los valores predeterminados y la coerción silenciosa. Al comprender su comportamiento y seguir las mejores prácticas, puede evitar muchas de las trampas comunes y mantener sus datos consistentes.

Estén atentos para más artículos en esta serie que explora otros tipos de datos MySQL y cómo usarlos de manera efectiva.

fuente