MySQL låter dig lagra JSON-data i inbyggd JSON-datatyp sedan version 5.7.8. Detta gör att du enkelt kan lagra JSON-dokument och extrahera JSON-dataelement utan datakonvertering. I den här artikeln kommer vi att titta på hur man lagrar JSON-data i MySQL.
MySQL JSON-datatyp låter dig lagra JSON-data så att du enkelt kan läsa eller söka värden i den med nyckel eller arrayindex, vilket gör det riktigt snabbt. Det finns inget behov av att konvertera text till JSON eller vice versa för att söka efter data.
Hur man lagrar JSON-data i MySQL
Vi kommer att titta på hur man lagrar JSON-data i MySQL och även hur man frågar efter kolumner med JSON-datatyp.
Här är syntaxen för att definiera en JSON-kolumn
column_name JSON
Observera att en kolumn för JSON-datatyp inte kan ha ett standardvärde och inte heller kan ha ett index.
Läs också:Hur man jämför nollvärden i MySQL
Exempel på MySQL JSON-datatyp
Här är ett exempel på en tabell users(id, details) där id är ett heltal och primärnyckel medan detaljer är en kolumn för JSON-datatyp.
create table users( id int auto_increment primary key, details json );
Hur man infogar JSON i MySQL
Här är SQL-frågan för att lagra 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 kommer att extrahera data från JSON-kolumner med hjälp av kolumnsökvägsoperator (->)
Här är ett exempel för att hämta webbläsarnamn för varje användare.
mysql> select id, details->'$.name' details from users; +----+-----------+ | id | details | +----+-----------+ | 1 | "Safari" | | 2 | "Chrome" | | 3 | "Firefox" | +----+-----------+ 3 rows in set (0.00 sec)
Du kommer att se att detaljkolumnerna har dubbla citattecken. Om du vill ta bort dubbla citattecken, använd ->> operator istället
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 också aggregera JSON-data GROUP BY-sats och aggregeringsfunktioner. Här är ett exempel för att räkna antalet webbläsare i vår data.
mysql> SELECT details->>'$.name' detail, count(detail) FROM users GROUP BY details->>'$.name';
Du kommer att se följande utdata
+---------+----------------+ | details | count(details) | +---------+----------------+ | Safari | 1 | | Firefox | 1 | | Chrome | 1 | +---------+----------------+ 3 rows in set (0.02 sec)
På samma sätt kan du också använda JSON-data i WHERE-satsen. Här är ett exempel på hur du väljer data med spend> 100
mysql> SELECT id, SUM(details->>'$.spend') spend FROM users WHERE details->>'$.spend' > 100 GROUP BY id;
Förhoppningsvis kommer den här artikeln att hjälpa dig att arbeta med JSON-data i MySQL. Ubiq gör det enkelt att visualisera data och övervaka dem i realtidsinstrumentpaneler. Prova Ubiq gratis.