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.