MySQL vous permet de stocker des données JSON dans le type de données JSON natif depuis la version 5.7.8. Cela vous permet de stocker facilement des documents JSON et d'extraire des éléments de données JSON sans conversion de données. Dans cet article, nous verrons comment stocker des données JSON dans MySQL.
Le type de données MySQL JSON vous permet de stocker des données JSON de manière à pouvoir facilement lire ou rechercher des valeurs à l'aide d'un index de clé ou de tableau, ce qui le rend très rapide. Il n'est pas nécessaire de convertir du texte en JSON ou vice versa pour interroger des données.
Comment stocker des données JSON dans MySQL
Nous verrons comment stocker des données JSON dans MySQL et également comment interroger des colonnes avec le type de données JSON.
Voici la syntaxe pour définir une colonne JSON
column_name JSON
Veuillez noter qu'une colonne de type de données JSON ne peut pas avoir de valeur par défaut, ni d'index.
A lire également :Comment comparer les valeurs nulles dans MySQL
Exemple de type de données JSON MySQL
Voici un exemple de table users(id, details) où id est un entier et une clé primaire tandis que détails est une colonne de type de données JSON.
create table users( id int auto_increment primary key, details json );
Comment insérer JSON dans MySQL
Voici la requête SQL pour stocker le document JSON dans MySQL.
insert into users(details) values( '{ "page": "/" , "name": "Safari", "os": "Mac", "spend": 100, "resolution": { "x": 1920, "y": 1080 } }' ), ( '{ "page": "/products", "name": "Chrome", "os": "Windows", "spend": 150, "resolution": { "x": 1680, "y": 1050 } }' ), ( '{ "page": "/shoes", "name": "Firefox", "os": "Windows", "spend": 200, "resolution": { "x": 1280, "y": 800 } }' );
Nous allons extraire les données des colonnes JSON à l'aide de l'opérateur de chemin de colonne (->)
Voici un exemple pour récupérer les noms de navigateur pour chaque utilisateur.
mysql> select id, details->'$.name' details from users; +----+-----------+ | id | details | +----+-----------+ | 1 | "Safari" | | 2 | "Chrome" | | 3 | "Firefox" | +----+-----------+ 3 rows in set (0.00 sec)
Vous verrez que les colonnes de détails ont des guillemets doubles. Si vous souhaitez supprimer les guillemets doubles, utilisez plutôt l'opérateur ->>
mysql> select id, details->>'$.name' details from users; +----+-----------+ | id | details | +----+-----------+ | 1 | Safari | | 2 | Chrome | | 3 | Firefox | +----+-----------+ 3 rows in set (0.00 sec)
Vous pouvez également agréger les données JSON avec la clause GROUP BY et les fonctions d'agrégation. Voici un exemple pour compter le nombre de navigateurs dans nos données.
mysql> SELECT details->>'$.name' detail, count(detail) FROM users GROUP BY details->>'$.name';
Vous verrez la sortie suivante
+---------+----------------+ | details | count(details) | +---------+----------------+ | Safari | 1 | | Firefox | 1 | | Chrome | 1 | +---------+----------------+ 3 rows in set (0.02 sec)
De même, vous pouvez également utiliser des données JSON dans la clause WHERE. Voici un exemple pour sélectionner des données avec spend> 100
mysql> SELECT id, SUM(details->>'$.spend') spend FROM users WHERE details->>'$.spend' > 100 GROUP BY id;
J'espère que cet article vous aidera à travailler avec des données JSON dans MySQL. Ubiq facilite la visualisation des données et leur suivi dans des tableaux de bord en temps réel. Essayez Ubiq gratuitement.