- 1 1. Introducción
- 2 2. Fundamentos de manejo de arrays con el tipo JSON de MySQL
- 3 3. Operaciones básicas sobre arrays JSON
- 4 4. Búsqueda y filtrado de arrays JSON
- 5 5. Casos de uso práctico: aprendizaje mediante escenarios reales para arrays JSON
- 6 6. Precauciones al usar el tipo JSON
- 7 7. Preguntas frecuentes sobre el uso de datos en estilo array en MySQL
- 8 8. Resumen
1. Introducción
La necesidad de manejar datos con estilo de arreglo en MySQL
En las bases de datos, los datos suelen almacenarse bajo un diseño relacional. Sin embargo, dependiendo de los requisitos de la aplicación, puede resultar útil almacenar varios valores en una sola columna. En tales casos, una estructura de datos como una “array” puede ayudar.
Por ejemplo, considere los siguientes casos:
- Almacenar múltiples etiquetas seleccionadas por un usuario.
- Guardar varias URLs de imágenes para un producto.
- Consolidar historial o registros en un solo campo.
Ventajas de aprovechar el tipo JSON
MySQL no proporciona un tipo “array” directo, pero al usar el tipo JSON, puede manejar datos con estilo de arreglo. El tipo JSON es altamente flexible y ofrece las siguientes ventajas:
- Soporta estructuras de datos anidadas.
- Permite la manipulación de datos directamente dentro de las consultas.
- Administra múltiples formatos de datos dentro de un solo campo.
En este artículo presentaremos cómo manejar de manera eficiente datos con estilo de arreglo en MySQL usando el tipo JSON.
2. Fundamentos de manejo de arrays con el tipo JSON de MySQL
¿Qué es el tipo JSON?
JSON (JavaScript Object Notation) es un formato ligero y sencillo de intercambio de datos. MySQL soporta un tipo JSON nativo a partir de la versión 5.7, lo que permite almacenar y manipular datos formateados en JSON directamente en la base de datos.
Ejemplo: lo siguiente son datos que se pueden almacenar en un campo de tipo JSON:
{
"tags": ["PHP", "MySQL", "JSON"],
"status": "published"
}
Beneficios y casos de uso del tipo JSON
Las principales ventajas de usar el tipo JSON son:
- Estructura de datos flexible: Puede manejar datos de longitud variable sin alterar el esquema relacional.
- Manipulación de datos eficiente: Utiliza las funciones incorporadas de MySQL (p. ej.
JSON_EXTRACT,JSON_ARRAY) para manipular datos de manera sencilla. - Diseño sin esquema posible: No es necesario modificar el esquema con frecuencia a medida que cambian las especificaciones de la aplicación.
Casos de uso:
- Asignar múltiples categorías a la información de un producto.
- Almacenar configuraciones personalizadas de usuarios.
- Utilizar en aplicaciones web que procesan datos JSON anidados.
3. Operaciones básicas sobre arrays JSON
Creación de arrays JSON
En MySQL puede usar la función JSON_ARRAY para crear arrays en formato JSON de manera sencilla. Los arrays son útiles cuando desea almacenar múltiples valores dentro de una sola columna.
Ejemplo de uso
En la siguiente consulta creamos un array JSON llamado tags.
SELECT JSON_ARRAY('PHP', 'MySQL', 'JavaScript') AS tags;
Resultado:
["PHP", "MySQL", "JavaScript"]
Ejemplo aplicado
Aquí hay un ejemplo que almacena 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 arrays JSON
Para recuperar datos almacenados en un array JSON se usa la función JSON_EXTRACT. Permite extraer elementos específicos dentro del array.
Ejemplo de uso
En el siguiente ejemplo recuperamos el segundo elemento (índice basado en cero) del array.
SELECT JSON_EXTRACT('["PHP", "MySQL", "JavaScript"]', '$[1]') AS second_tag;
Resultado:
"MySQL"
Recuperar múltiples elementos
También puede obtener varios elementos a la vez.
SELECT JSON_EXTRACT('["PHP", "MySQL", "JavaScript"]', '$[0]', '$[2]') AS extracted_values;
Añadir, actualizar y eliminar datos
Añadir datos a un array
Usando la función JSON_ARRAY_APPEND puede añadir nuevos datos a un array existente.
SET @tags = '["PHP", "MySQL"]';
SELECT JSON_ARRAY_APPEND(@tags, '$', 'JavaScript') AS updated_tags;
Resultado:
["PHP", "MySQL", "JavaScript"]
Actualizar datos dentro de un array
Puede actualizar un elemento específico dentro del array usando JSON_SET.
SET @tags = '["PHP", "MySQL", "JavaScript"]';
SELECT JSON_SET(@tags, '$[1]', 'Python') AS updated_tags;
Resultado:
["PHP", "Python", "JavaScript"]
%
Use JSON_REMOVE para eliminar un elemento específico dentro del array.
SET @tags = '["PHP", "MySQL", "JavaScript"]';
SELECT JSON_REMOVE(@tags, '$[1]') AS updated_tags;
Resultado:
["PHP", "JavaScript"]
4. Búsqueda y filtrado de arrays JSON
Búsqueda de arrays que contienen datos específicos
Para determinar si un array JSON contiene un valor específico, se utiliza la función JSON_CONTAINS. Esta función devuelve si el array JSON especificado contiene el valor dado.
Ejemplo de uso
En el siguiente ejemplo verificamos si el array JSON contiene “MySQL”.
SELECT JSON_CONTAINS('["PHP", "MySQL", "JavaScript"]', '"MySQL"') AS is_present;
Resultado:
1 (if present)
0 (if not present)
Ejemplo aplicado: búsqueda condicional
Si desea consultar filas en la base de datos que contengan un array JSON con un valor específico, puede usar JSON_CONTAINS en la cláusula WHERE.
SELECT *
FROM articles
WHERE JSON_CONTAINS(tags, '"MySQL"');
Esta consulta recupera filas donde la columna tags incluye “MySQL”.
Obtener la longitud de un array
Para obtener el número de elementos en un array JSON, use la función JSON_LENGTH. Esto es útil para el análisis de datos o filtrado condicional.
Ejemplo de uso
En el siguiente ejemplo obtenemos el número de elementos del array.
SELECT JSON_LENGTH('["PHP", "MySQL", "JavaScript"]') AS array_length;
Resultado:
3
Ejemplo práctico: extraer filas que cumplan una condición
Para extraer filas donde el número de elementos sea igual o mayor a un cierto valor, use JSON_LENGTH en la cláusula WHERE.
SELECT *
FROM articles
WHERE JSON_LENGTH(tags) >= 2;
Esta consulta selecciona filas donde la columna tags contiene dos o más elementos.
Ejemplo práctico con consultas condicionales
Puede combinar múltiples condiciones para búsquedas más avanzadas. La siguiente consulta encuentra filas donde el array tags contiene “JavaScript” y tiene tres o más elementos.
SELECT *
FROM articles
WHERE JSON_CONTAINS(tags, '"JavaScript"')
AND JSON_LENGTH(tags) >= 3;
5. Casos de uso práctico: aprendizaje mediante escenarios reales para arrays JSON
Cómo almacenar categorías de productos como un array JSON
En los sitios de comercio electrónico, los productos pueden pertenecer a múltiples categorías. En estos casos, usar un array JSON para almacenar información de categorías puede ser eficiente.
Ejemplo: almacenar datos de categorías para productos
A continuación, un ejemplo de crear una tabla con una columna JSON llamada categories y almacenar 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 de datos permite un almacenamiento conciso incluso cuando un producto pertenece a múltiples categorías.
Consultar productos que pertenecen a una categoría específica
Al aprovechar el tipo JSON, puede buscar fácilmente productos que pertenecen a categorías específicas.
Ejemplo de consulta
La siguiente consulta encuentra todos los productos en la categoría “Electronics”.
SELECT name
FROM products
WHERE JSON_CONTAINS(categories, '"Electronics"');
Resultado:
Laptop
Smartphone
Esta consulta le permite recuperar listas de productos por categoría de manera flexible.
Ejemplo: filtrado por rango de precios
Veamos cómo almacenar información de precios en JSON y consultar productos en función de un rango de precios.
Ejemplo de datos
A continuación, almacenamos información de precios de productos por ítem 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, utiliza JSON_EXTRACT.
SELECT name
FROM products_with_prices
WHERE JSON_EXTRACT(details, '$.price') >= 100000;
Resultado:
Laptop
Utilizando JSON_TABLE para expansión y ejemplos de consulta
Cuando deseas consultar datos JSON en forma relacional, puedes usar JSON_TABLE. Esta función te permite expandir un array JSON como una tabla virtual.
Ejemplo de uso
A continuación se muestra un ejemplo en el que se expande un array JSON y cada categoría se muestra en 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. Precauciones al usar el tipo JSON
Puntos de optimización de rendimiento
Aunque el tipo JSON es altamente flexible, sin un diseño adecuado puede afectar negativamente el rendimiento de la base de datos. A continuación se presentan los puntos clave de optimización de rendimiento.
1. Uso de índices
En MySQL no puedes establecer directamente un índice en una columna JSON, pero puedes crear una columna virtual e indexar una clave específica.
Ejemplo: creación de índice mediante columna virtual
En este ejemplo indexamos la clave price dentro de los datos JSON.
ALTER TABLE products_with_prices
ADD COLUMN price INT AS (JSON_EXTRACT(details, '$.price')) STORED,
ADD INDEX idx_price (price);
Al utilizar una columna virtual, puedes mejorar considerablemente el rendimiento de búsqueda en datos de tipo JSON.
2. Evitar estructuras JSON demasiado complejas
Las estructuras JSON profundamente anidadas afectan la legibilidad de las consultas y el rendimiento. Al diseñar los datos, adopta la estructura JSON más simple posible.
Ejemplo bueno:
{
"categories": ["Electronics", "Computers"],
"price": 150000
}
Estructura a evitar:
{
"product": {
"details": {
"price": 150000,
"categories": ["Electronics", "Computers"]
}
}
}
Cómo usar índices de manera efectiva
Al usar columnas virtuales para crear índices, se deben considerar los siguientes puntos:
- La columna virtual debe ser
STORED. - Usa
JSON_EXTRACTpara extraer claves específicas en la columna virtual.
Por ejemplo, para extraer el valor de la clave categories e indexarlo:
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
Aunque los datos de tipo JSON son flexibles, también conllevan el riesgo de almacenar formatos incorrectos. Para mantener la integridad de los datos, utiliza los siguientes enfoques.
1. Usar restricciones CHECK
A partir de MySQL 8.0, puedes usar restricciones CHECK para validar la estructura o el contenido de los datos JSON.
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, deberías validar el formato JSON a nivel de aplicación. En lenguajes de programación como PHP o Python, puedes usar bibliotecas estándar para validar JSON.
7. Preguntas frecuentes sobre el uso de datos en estilo array en MySQL
P1: ¿Ofrece MySQL un tipo array?
R1: MySQL no tiene un tipo “array” directo. Sin embargo, puedes manejar datos en estilo array usando el tipo JSON. Con el tipo JSON puedes almacenar múltiples valores en una columna y manipularlos mediante consultas.
Ejemplo:
SELECT JSON_ARRAY('value1', 'value2', 'value3') AS example_array;
Resultado:
["value1", "value2", "value3"]
P2: ¿Puedes establecer un índice en datos de tipo JSON?
R2: No puedes establecer un índice directamente en un tipo JSON. Sin embargo, puedes extraer claves o valores específicos en una columna virtual y luego establecer un índice en esa columna.
Ejemplo:
ALTER TABLE products_with_prices
ADD COLUMN price INT AS (JSON_EXTRACT(details, '$.price')) STORED,
ADD INDEX idx_price (price);
%
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, el uso de datos JSON muy grandes puede degradar el rendimiento, por lo que un diseño de datos adecuado es esencial.
Recomendaciones:
- Almacene solo los datos mínimos requeridos.
- Evite estructuras JSON profundamente anidadas.
Q4: ¿Cómo actualiza un elemento específico en un array JSON?
A4: Actualiza elementos específicos dentro de un array JSON con la función JSON_SET.
Ejemplo:
SET @tags = '["PHP", "MySQL", "JavaScript"]';
SELECT JSON_SET(@tags, '$[1]', 'Python') AS updated_tags;
Resultado:
["PHP", "Python", "JavaScript"]
Q5: Comparación entre el tipo JSON y el diseño de tabla tradicional
A5: El tipo JSON ofrece gran flexibilidad, pero también difiere en naturaleza del diseño relacional tradicional.
| Item | JSON type | Diseño tradicional de tablas |
|---|---|---|
| Flexibilidad | Alto (no se requieren cambios en el esquema) | Corregido (se requieren cambios en el esquema) |
| Rendimiento | Inferior en algunas operaciones | Optimizado |
| Complejidad de consulta | Requiere funciones JSON | Simple |
| Indexación | Parcialmente compatible mediante columnas virtuales | Totalmente compatible |
8. Resumen
Beneficios de manejar datos de estilo array con el tipo JSON en MySQL
Este artículo explicó el tipo JSON para manejar datos de estilo array en MySQL. Los puntos principales cubiertos aquí son:
Por qué usar el tipo JSON
MySQL no dispone de un tipo array directo, pero al usar el tipo JSON puede almacenar múltiples valores en una columna y realizar operaciones de datos flexibles.Operaciones básicas de JSON
* Aprendió cómo crear arrays JSON, extraer datos, actualizar y eliminar valores.
* Usó funciones comoJSON_ARRAY,JSON_EXTRACTyJSON_SETpara manipular datos de estilo array de forma eficiente.Búsqueda y filtrado
* UsóJSON_CONTAINSpara buscar valores específicos dentro de arrays JSON.
* UsóJSON_LENGTHpara obtener la longitud del array y realizar filtrado condicional.Casos de uso práctico
Se aprendieron escenarios de aplicación concretos, como la gestión de categorías de productos y la filtración por precio.Precauciones y optimización
* Se discutió cómo indexar datos JSON mediante columnas virtuales y la importancia de validar datos JSON.
Próximos pasos para aprovechar el tipo JSON
Al usar el tipo JSON en MySQL puede habilitar una gestión de datos más flexible que el diseño tradicional de bases de datos relacionales. Sin embargo, un diseño adecuado y consideraciones de rendimiento son esenciales.
Temas a aprender a continuación:
- Uso de índices compuestos
Diseñar índices que combinen columnas de tipo JSON con columnas regulares. - Funciones JSON avanzadas
UsarJSON_MERGE,JSON_OBJECTy otras funciones para operaciones más complejas. - Manipulación de datos a nivel de aplicación
Manipular datos JSON de MySQL de forma eficiente usando lenguajes como PHP o Python.
Resumen final
A través de este artículo ha aprendido a manejar datos de estilo array de forma eficiente usando el tipo JSON en MySQL. Al aplicar este conocimiento, puede diseñar sistemas de bases de datos más flexibles y escalables.


