sql >> Database teknologi >  >> RDS >> Mysql

Sådan gemmer du JSON-data i MySQL

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.

  1. Installation af webserver i FreeBSD 6.0 med Apache 2.2, MySQL 5.0 og PHP 5 – Del 3

  2. Databasen opdateres ikke automatisk med MySQL og Python

  3. Opret dynamisk kolonner sql

  4. Filtrere efter COUNT(*)?