Heim > Datenbank > MySQL-Tutorial > Grundlegende JSON-Operationen für MySQL5.7 (Codebeispiel)

Grundlegende JSON-Operationen für MySQL5.7 (Codebeispiel)

不言
Freigeben: 2019-03-22 11:06:46
nach vorne
3689 Leute haben es durchsucht

Der Inhalt dieses Artikels befasst sich mit den grundlegenden JSON-Operationen (Codebeispiele) von MySQL5.7. Ich hoffe, dass er für Sie hilfreich ist.

Grundlegende JSON-Operationen für MySQL 5.7

MySQL unterstützt seit Version 5.7 Daten im JSON-Format und ist sehr bequem zu bedienen.

Erstellen einer Tabelle
Beim Erstellen einer neuen Tabelle kann der Feldtyp direkt auf den JSON-Typ festgelegt werden. Wenn wir beispielsweise eine Tabelle erstellen:

mysql> CREATE TABLE `test_user`(`id` INT PRIMARY KEY AUTO_INCREMENT, `name` VARCHAR(50) NOT NULL, `info` JSON);
Nach dem Login kopieren

JSON-Typ-Feld NULL

Daten einfügen:

mysql> INSERT INTO test_user(`name`, `info`) VALUES('xiaoming','{"sex": 1, "age": 18, "nick_name": "小萌"}');
Nach dem Login kopieren

Das JSON-Typfeld muss eine gültige JSON-Zeichenfolge sein

Sie können die Funktion JSON_OBJECT() verwenden, um ein JSON-Objekt zu erstellen:

mysql> INSERT INTO test_user(`name`, `info`) VALUES('xiaohua', JSON_OBJECT("sex", 0, "age", 17));
Nach dem Login kopieren

Verwenden Sie die Funktion JSON_ARRAY(). Erstellen Sie ein JSON-Array:

mysql> INSERT INTO test_user(`name`, `info`) VALUES('xiaozhang', JSON_OBJECT("sex", 1, "age", 19, "tag", JSON_ARRAY(3,5,90)));
Nach dem Login kopieren

Sehen Sie sich nun die Daten in der test_user-Tabelle an:

mysql> select * from test_user; 
+----+-----------+--------------------------------------------+ 
| id | name      | info                                       |
+----+-----------+--------------------------------------------+ 
|  1 | xiaoming  | {"age": 18, "sex": 1, "nick_name": "小萌"} | 
|  2 | xiaohua   | {"age": 17, "sex": 0}                      |
|  3 | xiaozhang | {"age": 19, "sex": 1, "tag": [3, 5, 90]}   | 
+----+-----------+--------------------------------------------+
3 rows in set (0.04 sec)
Nach dem Login kopieren

Abfrage
Ausdruck: Das Objekt ist eine JSON-Spalte ->'$.key ', das Array ist eine JSON-Spalte ->'$.key[index]'

mysql> select name, info->'$.nick_name', info->'$.sex', info->'$.tag[0]' from test_user; 
+-----------+---------------------+---------------+------------------+ 
| name      | info->'$.nick_name' | info->'$.sex' | info->'$.tag[0]' | 
+-----------+---------------------+---------------+------------------+ 
| xiaoming  | "小萌"              | 1             | NULL             | 
| xiaohua   | NULL                | 0             | NULL             | 
| xiaozhang | NULL                | 1             | 3                | 
+-----------+---------------------+---------------+------------------+ 
3 rows in set (0.04 sec)
Nach dem Login kopieren

entspricht: Das Objekt ist JSON_EXTRACT(JSON-Spalte, '$.key'), das Array ist JSON_EXTRACT(json Column, ' $.key[index]')

mysql> select name, JSON_EXTRACT(info, '$.nick_name'), JSON_EXTRACT(info, '$.sex'), JSON_EXTRACT(info, '$.tag[0]')  from test_user;
 +-----------+-----------------------------------+-----------------------------+--------------------------------+ 
| name      | JSON_EXTRACT(info, '$.nick_name') | JSON_EXTRACT(info, '$.sex') | JSON_EXTRACT(info, '$.tag[0]') 
| +-----------+-----------------------------------+-----------------------------+--------------------------------+ 
| xiaoming  | "小萌"                            | 1                           | NULL                           |
| xiaohua   | NULL                              | 0                           | NULL                           | 
| xiaozhang | NULL                              | 1                           | 3                              | 
+-----------+-----------------------------------+-----------------------------+--------------------------------+ 
3 rows in set (0.04 sec)
Nach dem Login kopieren

Ich habe jedoch gesehen, dass „Xiaomeng“ oben doppelte Anführungszeichen hat. Das ist nicht das, was wir wollen . Wir können die Funktion JSON_UNQUOTE verwenden, um die doppelten Anführungszeichen zu entfernen

mysql> select name, JSON_UNQUOTE(info->'$.nick_name') from test_user where name='xiaoming'; 
+----------+-----------------------------------+ 
| name     | JSON_UNQUOTE(info->'$.nick_name') | 
+----------+-----------------------------------+ 
| xiaoming | 小萌                              | 
+----------+-----------------------------------+ 
1 row in set (0.05 sec)
Nach dem Login kopieren

Sie können den Operator auch direkt verwenden ->>

mysql> select name, info->>'$.nick_name' from test_user where name='xiaoming';
+----------+----------------------+ 
| name     | info->>'$.nick_name' | 
+----------+----------------------+ 
| xiaoming | 小萌                 | 
+----------+----------------------+ 
1 row in set (0.06 sec)
Nach dem Login kopieren

Natürlich können Attribute auch sein als Abfragebedingungen verwendet

mysql> select name, info->>'$.nick_name' from test_user where info->'$.nick_name'='小萌'; 
+----------+----------------------+ 
| name     | info->>'$.nick_name' | 
+----------+----------------------+ 
| xiaoming | 小萌                 | 
+----------+----------------------+ 
1 row in set (0.05 sec)
Nach dem Login kopieren

Es ist erwähnenswert, dass Sie virtuelle Spalten verwenden können, um angegebene Attribute vom JSON-Typ schnell abzufragen.

Erstellen Sie eine virtuelle Spalte:

mysql> ALTER TABLE `test_user` ADD `nick_name` VARCHAR(50) GENERATED ALWAYS AS (info->>'$.nick_name') VIRTUAL;
Nach dem Login kopieren

Beachten Sie, dass der Operator ->>

auf die gleiche Weise wie eine normale Spaltenabfrage verwendet wird :

mysql> select name,nick_name from test_user where nick_name='小萌'; 
+----------+-----------+ 
| name     | nick_name | 
+----------+-----------+ 
| xiaoming | 小萌      | 
+----------+-----------+ 
1 row in set (0.05 sec)
Nach dem Login kopieren

Aktualisieren
Verwenden Sie JSON_INSERT(), um neue Werte einzufügen, aber vorhandene Werte werden nicht überschrieben

mysql> UPDATE test_user SET info = JSON_INSERT(info, '$.sex', 1, '$.nick_name', '小花') where id=2;
Nach dem Login kopieren

Sehen Sie sich die Ergebnisse an

mysql> select * from test_user where id=2; 
+----+---------+--------------------------------------------+-----------+ 
| id | name    | info                                       | nick_name | 
+----+---------+--------------------------------------------+-----------+ 
|  2 | xiaohua | {"age": 17, "sex": 0, "nick_name": "小花"} | 小花      | 
+----+---------+--------------------------------------------+-----------+ 
1 row in set (0.06 sec)
Nach dem Login kopieren

Verwenden Sie JSON_SET(), um neue Werte einzufügen und vorhandene zu überschreiben

mysql> UPDATE test_user SET info = JSON_INSERT(info, '$.sex', 0, '$.nick_name', '小张') where id=3;
Nach dem Login kopieren

Sehen Sie sich die Ergebnisse an

mysql> select * from test_user where id=3; 
+----+-----------+---------------------------------------------------------------+-----------+ 
| id | name      | info                                                          | nick_name | 
+----+-----------+---------------------------------------------------------------+-----------+ 
|  3 | xiaozhang | {"age": 19, "sex": 1, "tag": [3, 5, 90], "nick_name": "小张"} | 小张      | 
+----+-----------+---------------------------------------------------------------+-----------+ 
1 row in set (0.06 sec)
Nach dem Login kopieren

Verwenden Sie JSON_REPLACE(), um Ersetzen Sie nur vorhandene Werte

mysql> UPDATE test_user SET info = JSON_REPLACE(info, '$.sex', 1, '$.tag', '[1,2,3]') where id=2;
Nach dem Login kopieren

Sehen Sie sich das Ergebnis an

mysql> select * from test_user where id=2; 
+----+---------+--------------------------------------------+-----------+ 
| id | name    | info                                       | nick_name | 
+----+---------+--------------------------------------------+-----------+ 
|  2 | xiaohua | {"age": 17, "sex": 1, "nick_name": "小花"} | 小花      | 
+----+---------+--------------------------------------------+-----------+ 
1 row in set (0.06 sec)
Nach dem Login kopieren

Sie können sehen, dass das Tag nicht aktualisiert wird

Löschen

Verwenden Sie JSON_REMOVE(), um JSON-Elemente zu löschen

mysql> UPDATE test_user SET info = JSON_REMOVE(info, '$.sex', '$.tag') where id=1;
Nach dem Login kopieren

Sehen Sie sich die Ergebnisse an

mysql> select * from test_user where id=1; 
+----+----------+----------------------------------+-----------+ 
| id | name     | info                             | nick_name | 
+----+----------+----------------------------------+-----------+ 
|  1 | xiaoming | {"age": 18, "nick_name": "小萌"} | 小萌      | 
+----+----------+----------------------------------+-----------+ 
1 row in set (0.05 sec)
Nach dem Login kopieren

In diesem Artikel finden Sie weitere spannende Informationen Inhalt, Sie können PHP Chinesisch der MySQL-Tutorial-Video-Spalte der Website folgen!

Das obige ist der detaillierte Inhalt vonGrundlegende JSON-Operationen für MySQL5.7 (Codebeispiel). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:segmentfault.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage