woodtype-846089_640

Tipos de datos JSON en MySQL. Aprende con estos ejemplos

Hola de nuevo, hoy os queríamos comentar los cambios que se han realizado en MySQL para la utilización de tipos de datos JSON dentro de las propias tablas de MySQL.

Como ya comentamos en esta entrada: https://www.gpsos.es/2018/05/tipo-de-datos-json-en-mysql/

Ya vimos por encima esta funcionalidad y hoy la queremos ampliar.

Tipos de datos JSON en MySQL

Ejemplos con tipos de datos JSON en MySQL

Para explicar los tipos de datos JSON vamos a crear una tabla normal como la siguiente y rellenarla de datos:

 Create table continentes (id int, continente varchar(30), poblacion bigint);
 insert into continentes values (1,'Asia',4581757408);
 insert into continentes values (2,'Africa',1216130000);
 insert into continentes values (3,'Europa',738849000);
 insert into continentes values (4,'America',1001559000);
 insert into continentes values (5,'Oceania',38304000);
 insert into continentes values (6,'Antartida',1106);. 

En la primera prueba, vamos a crear una tabla nueva en la que incluimos un tipo JSON.

 CREATE TABLE continentes_json(
   id int,
   test json
 ); 

En esta nueva tabla, vamos a insertar los datos de la tabla continentes pero ya con el propio formato de JSON, para ello vamos a utilizar la función json_object:

mysql> insert into continentes_json select id, json_object('Continente', continente, 'Poblacion', poblacion) from continentes;

 Query OK, 6 rows affected (0.01 sec)
 Records: 6  Duplicates: 0  Warnings: 0
 mysql> select * from continentes_json;
 +------+----------------------------------------------------+
 | id   | test                                               |
 +------+----------------------------------------------------+
 |    1 | {"Poblacion": 4581757408, "Continente": "Asia"}    |
 |    2 | {"Poblacion": 1216130000, "Continente": "Africa"}  |
 |    3 | {"Poblacion": 738849000, "Continente": "Europa"}   |
 |    4 | {"Poblacion": 1001559000, "Continente": "America"} |
 |    5 | {"Poblacion": 38304000, "Continente": "Oceania"}   |
 |    6 | {"Poblacion": 1106, "Continente": "Antartida"}     |
 +------+----------------------------------------------------+
 6 rows in set (0.00 sec) 

Como se puede comprobar, hemos creado un JSON Object por cada una de las filas. Ahora el campo nombre y población lo tenemos integrado dentro del campo test de la nueva tabla.

También podemos crear arrays de objetos JSON y almacenarlos en el mismo campo anterior. Esto nos complica un poco la búsqueda y el tratamiento de datos pero nos da una mayor flexibilidad de almacenamiento de los datos. Para mostrar su funcionamiento vamos a hacer el INSERT en la misma tabla. Simplemente añadimos la función JSON_ARRAYAGG que nos permite agregar los 6 objetos JSON en un solo array:

 mysql> truncate table continentes_json;
 Query OK, 0 rows affected (0.04 sec)
 mysql> insert into continentes_json select 1, JSON_ARRAYAGG(json_object('Id', id, 'Continente', continente, 'Poblacion', poblacion)) from continentes;
 Query OK, 1 row affected (0.00 sec)
 Records: 1  Duplicates: 0  Warnings: 0
 mysql> select * from continentes_json;
 +------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 | id   | test                                                                                                                                                                                                                                                                                                                                                               |
 +------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 |    1 | [{"Id": 1, "Poblacion": 4581757408, "Continente": "Asia"}, {"Id": 2, "Poblacion": 1216130000, "Continente": "Africa"}, {"Id": 3, "Poblacion": 738849000, "Continente": "Europa"}, {"Id": 4, "Poblacion": 1001559000, "Continente": "America"}, {"Id": 5, "Poblacion": 38304000, "Continente": "Oceania"}, {"Id": 6, "Poblacion": 1106, "Continente": "Antartida"}] |
 +------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 1 row in set (0.00 sec) 

Esperamos que la entrada os sea de interés y la podáis utilizar. Si quieres que te ayudemos con alguna query de MySQL o cualquier base de datos o quieres que revisemos tu entorno. No dudes en contactar con nosotros.

Nos vemos en próximas entradas.

Un saludo,

Equipo DBA.

Si no quieres perderte la siguiente entrada ni las que publicamos, puedes darte de alta en nuestra newsletter mensual. Con un email al mes estarás al día de todas nuestras publicaciones.

Comments are closed.