Tema SQL
MAKE_SET() (MySQL / MariaDB)
Construye una cadena separada por comas con aquellos argumentos cuyo bit correspondiente está activo en la máscara entera. Relacionado con el tipo SET antiguo y flags en un entero.
Descripción
MAKE_SET(bits, s1, s2, s3, …) interpreta el primer argumento como máscara de bits: el bit 0 (menos significativo) controla s1, el bit 1 a s2, etc. Los strings seleccionados se concatenan con coma. Es poco legible para equipos nuevos; documenta el mapa bit→significado o migra a columnas booleanas o tabla de permisos. Útil al leer legados con columnas SET o enteros como bitmask. No confundir con BIT_COUNT u operadores & sin convertir a lista legible.
Estructura general
Forma habitual de la sentencia: orden de cláusulas, qué parte filtra, agrupa o proyecta columnas, y qué devuelve el motor. Cópiala como plantilla y sustituye nombres por tus tablas reales.
MAKE_SET(máscara_bits, cadena1 [, cadena2 ...])
Componentes
Cada componente tiene un papel concreto en la ejecución lógica de la sentencia. Léelos en orden: así entiendes qué puedes omitir, qué es obligatorio y qué expresiones son válidas en cada sitio según tu motor.
- Máscara
- Entero; cada bit activa o no el string en esa posición.
- Orden
- Primer string tras la máscara corresponde al bit menos significativo.
- Legibilidad
- Para diseños nuevos, preferir JSON o columnas explícitas.
Ejemplos
Ejemplo 1
SELECT MAKE_SET(3, 'a', 'b', 'c') AS conjunto;
-- a,b (bits 1 y 2 activos: 3 = 0b11)
SELECT MAKE_SET(permisos, 'leer', 'escribir', 'borrar') AS permiso_txt
FROM roles;
Ejemplo 2
SELECT MAKE_SET(5, 'read', 'write', 'exec', 'delete') AS permisos_txt;
Los ejemplos son ilustrativos. En producción usa consultas parametrizadas (prepared statements), revisa índices y aplica el principio de menor privilegio en cuentas de base de datos.