- 1 1. Introducción
- 2 2. Conocimientos básicos para manejar arrays con MySQL JSON
- 3 3. Operaciones básicas con arrays JSON
- 4 4. Búsqueda y filtrado de arreglos JSON
- 5 5. Ejemplos prácticos: uso de arreglos JSON en casos reales
- 6 6. Consideraciones importantes al usar el tipo de datos JSON
- 7 7. Preguntas frecuentes sobre el uso de arreglos en MySQL
- 8 8. Resumen
1. Introducción
La necesidad de manejar datos de tipo array en MySQL
Las bases de datos suelen almacenar la información siguiendo principios de diseño relacional. Sin embargo, según los requerimientos de la aplicación, pueden existir casos en los que se desee guardar varios valores en una sola columna. En esas situaciones, una estructura de datos similar a un “array” resulta útil.
Por ejemplo, considere los siguientes escenarios:
- Almacenar múltiples etiquetas seleccionadas por un usuario.
- Guardar varias URLs de imágenes para un producto.
- Combinar historial o registros en un único campo.
Beneficios de usar el tipo de datos JSON
MySQL no ofrece un “tipo array” directo, pero al utilizar el tipo de datos JSON puede manejar estructuras de datos tipo array. El tipo JSON es muy flexible y brinda las siguientes ventajas:
- Soporta estructuras de datos anidadas.
- Permite una manipulación sencilla de los datos dentro de las consultas.
- Facilita la gestión de múltiples formatos de datos en un solo campo.
En este artículo, presentaremos cómo manejar eficientemente datos tipo array en MySQL usando el tipo de datos JSON.
2. Conocimientos básicos para manejar arrays con MySQL JSON
¿Qué es el tipo de datos JSON?
JSON (JavaScript Object Notation) es un formato ligero y sencillo para el intercambio de datos. En MySQL, el soporte nativo para JSON se introdujo a partir de la versión 5.7, lo que permite almacenar y manipular datos con formato JSON directamente en la base de datos.
Ejemplo: A continuación se muestra un ejemplo de datos que pueden almacenarse en una columna JSON.
{
"tags": ["PHP", "MySQL", "JSON"],
"status": "published"
}
Ventajas y casos de uso del tipo de datos JSON
Los principales beneficios de usar el tipo JSON son los siguientes:
- Estructura de datos flexible: Puede manejar datos de longitud variable sin modificar el esquema relacional.
- Manipulación de datos eficiente: Puede manipular datos fácilmente mediante funciones dedicadas de MySQL (p. ej.,
JSON_EXTRACT,JSON_ARRAY). - Diseño sin esquema: No es necesario modificar frecuentemente el esquema cuando cambian los requerimientos de la aplicación.
Ejemplos de casos de uso:
- Asignar múltiples categorías a la información de un producto.
- Guardar configuraciones personalizadas de usuarios.
- Utilizar datos JSON anidados en aplicaciones web.
3. Operaciones básicas con arrays JSON
Creando un array JSON
En MySQL, puede crear fácilmente un array JSON usando la función JSON_ARRAY. Los arrays son útiles cuando se almacenan varios valores en una sola columna.
Ejemplo
La siguiente consulta crea un array JSON llamado tags.
SELECT JSON_ARRAY('PHP', 'MySQL', 'JavaScript') AS tags;
Resultado:
["PHP", "MySQL", "JavaScript"]
Ejemplo práctico
El siguiente ejemplo muestra cómo almacenar un array JSON en la base de datos mediante una sentencia INSERT.
CREATE TABLE articles (
id INT AUTO_INCREMENT PRIMARY KEY,
tags JSON
);
INSERT INTO articles (tags)
VALUES (JSON_ARRAY('PHP', 'MySQL', 'JavaScript'));
Extrayendo datos de un array JSON
Para obtener los datos almacenados en un array JSON, utilice la función JSON_EXTRACT. Esta función permite extraer fácilmente elementos específicos del array.
Ejemplo
El siguiente ejemplo recupera el segundo elemento del array (el índice comienza en 0).
SELECT JSON_EXTRACT('["PHP", "MySQL", "JavaScript"]', '$[1]') AS second_tag;
Resultado:
"MySQL"
Recuperando múltiples elementos
También puede obtener varios elementos a la vez.
SELECT JSON_EXTRACT('["PHP", "MySQL", "JavaScript"]', '$[0]', '$[2]') AS extracted_values;
Añadiendo, actualizando y eliminando datos
Añadiendo datos a un array
Puede usar la función JSON_ARRAY_APPEND para agregar nuevos datos a un array existente.
SET @tags = '["PHP", "MySQL"]';
SELECT JSON_ARRAY_APPEND(@tags, '$', 'JavaScript') AS updated_tags;
Resultado:
["PHP", "MySQL", "JavaScript"]
Actualizando datos en un array
Puede actualizar un elemento específico del array usando la función JSON_SET.
SET @tags = '["PHP", "MySQL", "JavaScript"]';
SELECT JSON_SET(@tags, '$[1]', 'Python') AS updated_tags;
Resultado:
["PHP", "Python", "JavaScript"]
Eliminar datos de un arreglo
Puedes eliminar un elemento específico del arreglo usando la función JSON_REMOVE.
SET @tags = '["PHP", "MySQL", "JavaScript"]';
SELECT JSON_REMOVE(@tags, '$[1]') AS updated_tags;
Resultado:
["PHP", "JavaScript"]
4. Búsqueda y filtrado de arreglos JSON
Búsqueda de arreglos que contienen datos específicos
Para verificar si un arreglo JSON contiene datos específicos, usa la función JSON_CONTAINS. Esta función determina si un valor especificado existe dentro del arreglo JSON.
Ejemplo
El siguiente ejemplo verifica si el arreglo JSON contiene “MySQL”.
SELECT JSON_CONTAINS('["PHP", "MySQL", "JavaScript"]', '"MySQL"') AS is_present;
Resultado:
1 (if present)
0 (if not present)
Ejemplo práctico: búsqueda condicional
Para buscar filas que contengan un valor específico en un arreglo JSON dentro de una tabla de base de datos, usa JSON_CONTAINS en la cláusula WHERE.
SELECT *
FROM articles
WHERE JSON_CONTAINS(tags, '"MySQL"');
Esta consulta recupera filas donde la columna tags contiene “MySQL”.
Obtener la longitud de un arreglo
Para obtener el número de elementos en un arreglo JSON, usa la función JSON_LENGTH. Esta función devuelve la cantidad de elementos en el arreglo y es útil para análisis de datos y lógica condicional.
Ejemplo
El siguiente ejemplo recupera el número de elementos del arreglo.
SELECT JSON_LENGTH('["PHP", "MySQL", "JavaScript"]') AS array_length;
Resultado:
3
Ejemplo práctico: extracción de filas que cumplen una condición específica
Para extraer filas donde el número de elementos sea mayor o igual a un valor específico, usa JSON_LENGTH en la cláusula WHERE.
SELECT *
FROM articles
WHERE JSON_LENGTH(tags) >= 2;
Esta consulta recupera filas donde la columna tags contiene dos o más elementos.
Ejemplo avanzado de consulta condicional
Puedes combinar múltiples condiciones para búsquedas más avanzadas. La siguiente consulta busca filas donde el arreglo tags contiene “JavaScript” y tiene tres o más elementos.
SELECT *
FROM articles
WHERE JSON_CONTAINS(tags, '"JavaScript"')
AND JSON_LENGTH(tags) >= 3;
5. Ejemplos prácticos: uso de arreglos JSON en casos reales
Cómo almacenar categorías de productos como un arreglo JSON
En sitios de comercio electrónico y sistemas similares, un producto puede pertenecer a múltiples categorías. En esos casos, puedes almacenar la información de categorías de manera eficiente usando un arreglo JSON.
Ejemplo: almacenamiento de datos de categorías de productos
A continuación se muestra un ejemplo de creación de una columna JSON llamada categories en una tabla de productos y el almacenamiento de múltiples categorías.
CREATE TABLE products (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL,
categories JSON
);
INSERT INTO products (name, categories)
VALUES ('Laptop', JSON_ARRAY('Electronics', 'Computers')),
('Smartphone', JSON_ARRAY('Electronics', 'Mobile Devices'));
Esta estructura mantiene los datos concisos incluso cuando un producto pertenece a varias categorías.
Consulta para extraer productos en una categoría específica
Aprovechando el tipo de datos JSON, puedes buscar fácilmente productos que pertenezcan a una categoría específica.
Ejemplo de consulta
La siguiente consulta recupera todos los productos en la categoría “Electronics”.
SELECT name
FROM products
WHERE JSON_CONTAINS(categories, '"Electronics"');
Resultado:
Laptop
Smartphone
Esta consulta facilita la obtención de listas de productos por categoría de manera flexible.
Ejemplo: filtrado por rango de precios
Veamos cómo almacenar datos JSON que incluyan información de precios y luego buscar productos según un rango de precios.
Datos de ejemplo
El siguiente ejemplo almacena información de precios por producto usando el tipo JSON.
CREATE TABLE products_with_prices (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL,
details JSON
);
INSERT INTO products_with_prices (name, details)
VALUES ('Laptop', '{"price": 150000, "categories": ["Electronics", "Computers"]}'),
('Smartphone', '{"price": 80000, "categories": ["Electronics", "Mobile Devices"]}');
Ejemplo de consulta
Para buscar productos con un precio de 100,000 o más, use la función JSON_EXTRACT.
SELECT name
FROM products_with_prices
WHERE JSON_EXTRACT(details, '$.price') >= 100000;
Resultado:
Laptop
Expandiendo JSON con JSON_TABLE y ejemplo de consulta
Si desea consultar datos JSON en un formato relacional, la función JSON_TABLE es muy útil. Esta función le permite expandir un arreglo JSON en una tabla virtual.
Ejemplo
El siguiente ejemplo expande un arreglo JSON y muestra cada categoría como una fila separada.
SELECT *
FROM JSON_TABLE(
'["Electronics", "Computers", "Mobile Devices"]',
'$[*]' COLUMNS(
category_name VARCHAR(100) PATH '$'
)
) AS categories_table;
Resultado:
category_name
--------------
Electronics
Computers
Mobile Devices

6. Consideraciones importantes al usar el tipo de datos JSON
Consejos para optimizar el rendimiento
Aunque el tipo JSON es flexible, un diseño deficiente puede afectar negativamente el rendimiento de la base de datos. A continuación se presentan los puntos clave de optimización.
1. Uso de índices
En MySQL, no se puede crear un índice directamente sobre una columna JSON, pero sí puede crear una columna generada e indexar una clave específica.
Ejemplo: Crear un índice usando una columna generada
En el siguiente ejemplo, la clave price dentro de los datos JSON se usa como objetivo del índice.
ALTER TABLE products_with_prices
ADD COLUMN price INT AS (JSON_EXTRACT(details, '$.price')) STORED,
ADD INDEX idx_price (price);
Al usar una columna generada, puede mejorar significativamente el rendimiento de búsqueda en datos JSON.
2. Evitar estructuras JSON excesivamente complejas
Las estructuras JSON profundamente anidadas pueden reducir la legibilidad y el rendimiento de las consultas. Al diseñar los datos, elija la estructura JSON más simple posible.
Buen ejemplo:
{
"categories": ["Electronics", "Computers"],
"price": 150000
}
Ejemplo a evitar:
{
"product": {
"details": {
"price": 150000,
"categories": ["Electronics", "Computers"]
}
}
}
Cómo aprovechar los índices
Al indexar usando columnas generadas, tenga en cuenta los siguientes puntos:
- La columna generada debe ser
STORED. - Use la función
JSON_EXTRACTpara extraer una clave específica como columna generada.
Por ejemplo, para extraer el primer elemento de la clave categories y crear un índice, haga lo siguiente.
ALTER TABLE products
ADD COLUMN main_category VARCHAR(255) AS (JSON_EXTRACT(categories, '$[0]')) STORED,
ADD INDEX idx_main_category (main_category);
La importancia de la validación de datos
Debido a que los datos JSON son flexibles, también es más fácil almacenar datos en un formato incorrecto. Para mantener la integridad de los datos, use los siguientes enfoques.
1. Usar restricciones CHECK
En MySQL 8.0 y posteriores, puede validar la estructura y el contenido JSON usando restricciones CHECK.
ALTER TABLE products_with_prices
ADD CONSTRAINT check_price CHECK (JSON_EXTRACT(details, '$.price') >= 0);
2. Validación a nivel de aplicación
Al insertar datos, se recomienda validar el formato JSON en el lado de la aplicación. Lenguajes de programación como PHP y Python pueden validar JSON usando sus bibliotecas estándar.
7. Preguntas frecuentes sobre el uso de arreglos en MySQL
P1: ¿MySQL tiene un tipo de dato arreglo?
A1: MySQL no tiene un “tipo de datos array” directo. Sin embargo, al usar el tipo JSON, puedes manejar estructuras de datos similares a arrays. Con el tipo JSON, puedes almacenar múltiples valores en una columna y manipularlos mediante consultas.
Example:
SELECT JSON_ARRAY('Value 1', 'Value 2', 'Value 3') AS array_example;
Resultado:
["Value 1", "Value 2", "Value 3"]
Q2: ¿Puedes crear un índice en datos JSON?
A2: No puedes crear un índice directamente sobre el tipo JSON. Sin embargo, puedes extraer una clave o valor específico a una columna generada y crear un índice sobre esa columna generada.
Example:
ALTER TABLE products_with_prices
ADD COLUMN price INT AS (JSON_EXTRACT(details, '$.price')) STORED,
ADD INDEX idx_price (price);
Esto te permite buscar valores dentro de datos JSON de manera eficiente.
Q3: ¿Existe un límite de tamaño para los datos JSON?
A3: El tipo JSON de MySQL puede almacenar hasta 4 GB de datos. Sin embargo, usar documentos JSON extremadamente grandes puede reducir el rendimiento, por lo que deberías diseñar tus datos con cuidado.
Recomendaciones:
- Almacena solo los datos mínimos necesarios.
- Evita estructuras JSON muy anidadas.
Q4: ¿Cómo puedo actualizar un elemento específico dentro de un array JSON?
A4: Puedes actualizar un elemento específico en un array usando la función JSON_SET.
Example:
SET @tags = '["PHP", "MySQL", "JavaScript"]';
SELECT JSON_SET(@tags, '$[1]', 'Python') AS updated_tags;
Resultado:
["PHP", "Python", "JavaScript"]
Q5: Comparación del tipo JSON vs. diseño de tabla normal
A5: Aunque el tipo JSON es muy flexible, tiene características diferentes en comparación con el diseño tradicional de bases de datos relacionales.
| Item | JSON Type | Traditional Table Design |
|---|---|---|
| Flexibility | High (no schema changes needed) | Fixed (schema changes required) |
| Performance | Inferior for some operations | Optimized |
| Query Complexity | Requires JSON functions | Simple |
| Indexing | Partially supported via generated columns | Fully supported |
8. Resumen
Beneficios de usar el tipo de datos JSON para operaciones de arrays en MySQL
En este artículo, explicamos el tipo de datos JSON, que es útil al trabajar con datos similares a arrays en MySQL. A continuación se muestra un resumen de los puntos clave tratados:
- Por qué usar el tipo JSON MySQL no tiene un tipo de array directo, pero al usar el tipo JSON, puedes almacenar múltiples valores en una columna y lograr una manipulación flexible de los datos.
- Operaciones básicas con JSON
- Cubrimos cómo crear arrays JSON, extraer datos, actualizar datos y eliminar datos.
- Usando funciones convenientes como
JSON_ARRAY,JSON_EXTRACTyJSON_SET, puedes manipular datos de arrays de manera eficiente.
- Búsqueda y filtrado
- Cómo buscar datos que contengan valores específicos usando
JSON_CONTAINS. - Cómo obtener el número de elementos con
JSON_LENGTHy realizar filtrado condicional.
- Ejemplos prácticos A través de casos de uso reales, como la gestión de categorías de productos y el filtrado por precio, aprendimos formas concretas de aplicar arrays JSON en aplicaciones.
- Consideraciones y optimización
- Explicamos cómo configurar índices usando columnas generadas y enfatizamos la importancia de validar los datos JSON.
Próximos pasos al usar el tipo de datos JSON
Al usar el tipo JSON en MySQL, puedes gestionar los datos de forma más flexible que en los diseños tradicionales de bases de datos relacionales. Sin embargo, un buen diseño y consideraciones de rendimiento son esenciales.
Temas a aprender a continuación:
- Uso de índices compuestos Diseño de índices que combina datos JSON con columnas normales.
- Uso de funciones JSON avanzadas Realizar operaciones más complejas con funciones como
JSON_MERGEyJSON_OBJECT. - Manejo de datos a nivel de aplicación Cómo manipular eficientemente datos JSON de MySQL usando PHP o Python.
Resumen
Con este artículo, ahora deberías comprender cómo manejar eficientemente datos similares a arrays usando el tipo de datos JSON de MySQL. Al aplicar este conocimiento, puedes diseñar bases de datos más flexibles y escalables.


