MySQL giver dig mulighed for at gemme JSON-data i den oprindelige JSON-datatype siden version 5.7.8. Dette giver dig mulighed for nemt at gemme JSON-dokumenter og udtrække JSON-dataelementer uden datakonvertering. I denne artikel vil vi se på, hvordan man gemmer JSON-data i MySQL.
MySQL JSON-datatypen giver dig mulighed for at gemme JSON-data, så du nemt kan læse eller søge værdier i dem ved hjælp af nøgle eller array-indeks, hvilket gør det virkelig hurtigt. Der er ingen grund til at konvertere tekst til JSON eller omvendt for at forespørge data.
Sådan gemmer du JSON-data i MySQL
Vi vil se på, hvordan man gemmer JSON-data i MySQL, og hvordan man forespørger på kolonner med JSON-datatypen.
Her er syntaksen til at definere en JSON-kolonne
column_name JSON
Bemærk venligst, at en JSON-datatypekolonne ikke kan have standardværdi, og den kan heller ikke have et indeks.
Læs også:Sådan sammenlignes null-værdier i MySQL
Eksempel på MySQL JSON-datatype
Her er et eksempel på en tabel brugere(id, detaljer) hvor id er et heltal og primær nøgle mens detaljer er en JSON-datatypekolonne.
create table users(
id int auto_increment primary key,
details json
);
Sådan indsætter du JSON i MySQL
Her er SQL-forespørgslen til at gemme JSON-dokument i 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 } }'
); Vi vil udtrække data fra JSON-kolonner ved hjælp af kolonnestioperator (->)
Her er et eksempel til at hente browsernavne for hver bruger.
mysql> select id, details->'$.name' details from users; +----+-----------+ | id | details | +----+-----------+ | 1 | "Safari" | | 2 | "Chrome" | | 3 | "Firefox" | +----+-----------+ 3 rows in set (0.00 sec)
Du vil se, at kolonnerne med detaljer har dobbelte anførselstegn. Hvis du vil fjerne dobbelte anførselstegn, skal du bruge ->> operator i stedet
mysql> select id, details->>'$.name' details from users; +----+-----------+ | id | details | +----+-----------+ | 1 | Safari | | 2 | Chrome | | 3 | Firefox | +----+-----------+ 3 rows in set (0.00 sec)
Du kan også aggregere JSON-data GROUP BY-klausul og aggregeringsfunktioner. Her er et eksempel til at tælle antallet af browsere i vores data.
mysql> SELECT details->>'$.name' detail, count(detail) FROM users GROUP BY details->>'$.name';
Du vil se følgende output
+---------+----------------+ | details | count(details) | +---------+----------------+ | Safari | 1 | | Firefox | 1 | | Chrome | 1 | +---------+----------------+ 3 rows in set (0.02 sec)
På samme måde kan du også bruge JSON-data i WHERE-klausulen. Her er et eksempel på valg af data med forbrug> 100
mysql> SELECT id, SUM(details->>'$.spend') spend
FROM users
WHERE details->>'$.spend' > 100
GROUP BY id;
Forhåbentlig vil denne artikel hjælpe dig med at arbejde med JSON-data i MySQL. Ubiq gør det nemt at visualisere data og overvåge dem i dashboards i realtid. Prøv Ubiq gratis.