MySQL操作のJSONデータタイプ操作の詳細


前の記事ではmysqlデータストアプロセスパラメータの実例を紹介しましたが、今日はMySQL操作のJSONデータタイプに関する内容を見てみます。
概要
mysqlは5.7.8バージョンから、json構造のデータストアとクエリをサポートしています。これはmysqlも絶えず勉強しています。nosqlデータベースを増やしている点を示しています。でも、mysqlはやはり関係型のデータベースです。jsonという非構造的なデータを扱う時、やはり違和感があります。
JSONフィールドを作成するテーブル
まず最初にテーブルを作成します。このテーブルにはjson形式のフィールドが含まれています。

CREATE TABLE table_name (
  id INT NOT NULL AUTO_INCREMENT, 
  json_col JSON,
  PRIMARY KEY(id)
);
上の文は主にJson_に注意します。colというフィールドで指定されたデータの種類はJSONです。
簡単なJSONデータを挿入します。

INSERT INTO
  table_name (json_col) 
VALUES
  ('{"City": "Galle", "Description": "Best damn city in the world"}');
  
上記のSQL文はVALESの後ろの部分に注意します。json形式のデータにはダブルクォーテーションが必要です。したがって、VALESの後ろの内容はシングルクォーテーションマークで包まれます。
複雑なJSONデータを挿入します。

INSERT INTO table(col) 
VALUES('{"opening":"Sicilian","variations":["pelikan","dragon","najdorf"]}');
この場所には、json配列が挿入されています。主に単引用符と二重引用符の問題に注意します。
JSONデータを修正する
前の例では、いくつかのJSONデータを挿入しましたが、もしJSONデータの中のある内容を修正したいなら、どうやって実現しましたか?例えば、私たちはvariations配列に元素を追加してもいいです。

UPDATE myjson SET dict=JSON_ARRAY_APPEND(dict,'$.variations','scheveningen') WHERE id = 2;
このSQL文では、$はJSONフィールドを表しています。ARRAY_APPEND関数は元素を追加します。今からクエリー文を実行します。

SELECT * FROM myjson
得られた結果は:

+----+-----------------------------------------------------------------------------------------+
| id | dict                                          |
+---+-----------------------------------------------------------------------------------------+
| 2 | {"opening": "Sicilian", "variations": ["pelikan", "dragon", "najdorf", "scheveningen"]} |
+----+-----------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
MySQLにおけるJSONデータの取得方法については、公式リンクJSON Path Synttaxを参照してください。
索引の作成
MySQLのJSON形式のデータは直接索引を作成することができませんが、検索するデータを個別に持ち運べばいいです。単独のデータ列をこのフィールドにキーを押します。以下は公式の例です。

mysql> CREATE TABLE jemp (
  ->   c JSON,
  ->   g INT GENERATED ALWAYS AS (c->"$.id"),
  ->   INDEX i (g)
  -> );
Query OK, 0 rows affected (0.28 sec)

mysql> INSERT INTO jemp (c) VALUES
   >  ('{"id": "1", "name": "Fred"}'), ('{"id": "2", "name": "Wilma"}'),
   >  ('{"id": "3", "name": "Barney"}'), ('{"id": "4", "name": "Betty"}');
Query OK, 4 rows affected (0.04 sec)
Records: 4 Duplicates: 0 Warnings: 0

mysql> SELECT c->>"$.name" AS name
   >   FROM jemp WHERE g > 2;
+--------+
| name  |
+--------+
| Barney |
| Betty |
+--------+
2 rows in set (0.00 sec)

mysql> EXPLAIN SELECT c->>"$.name" AS name
   >  FROM jemp WHERE g > 2\G
*************************** 1. row ***************************
      id: 1
 select_type: SIMPLE
    table: jemp
  partitions: NULL
     type: range
possible_keys: i
     key: i
   key_len: 5
     ref: NULL
     rows: 2
   filtered: 100.00
    Extra: Using where
1 row in set, 1 warning (0.00 sec)

mysql> SHOW WARNINGS\G
*************************** 1. row ***************************
 Level: Note
  Code: 1003
Message: /* select#1 */ select json_unquote(json_extract(`test`.`jemp`.`c`,'$.name'))
AS `name` from `test`.`jemp` where (`test`.`jemp`.`g` > 2)
1 row in set (0.00 sec)
この例は簡単です。JSONフィールドのidフィールドを単独でフィールドgに持ち出して、フィールドgにインデックスを作ります。検索条件もフィールドgにあります。
文字列変換JSON形式
JSON形式の文字列をMySQLのJSONタイプに変換します。

SELECT CAST('[1,2,3]' as JSON) ;
SELECT CAST('{"opening":"Sicilian","variations":["pelikan","dragon","najdorf"]}' as JSON);
すべてのMYSQL JSON関数
Name
Description
JSON_APPEND()
アプリdata to JSON document
JSON_ARRAY()
Create JSON array
JSON_ARRAY_APPEND()
アプリdata to JSON document
JSON_ARRAY_INSERT()
Insert into JSON array->Return value from JSON column after evaluating path;equivalent to JSON_EXTRACT()
JSON_CONTAINS()
Whether JSON document contains specific object at path
JSON_CONTAINS_PATH()
Whether JSON document contains any data at path
JSON_DEPTH()
Maximum depth of JSON document
JSON_EXTRACT()
Return data from JSON document->Return value from JSON column after evaluating path and unquot;equivalent to JSON_UNQUOTE(JSON_)EXTRACT().
JSON_INSERT()
Insert data into JSON document
JSON_KEYS()
Aray of keys from JSON document
JSON_LENGTH()
Number of element in JSON document
JSON_MERGE()
Merge JSON documents,preserving duplicate keys.Deprecated snonm for JSON_MERGE_PRESERVE()
JSON_MERGE_PRESERVE()
Merge JSON documents,preserving duplicate keys
JSON_OBJECT()
Create JSON oject
JSON_QUOTE()
Qu ote JSON document
JSON_REMOVE()
Remove data from JSON document
JSON_REPLACE()
Replace values in JSON document
JSON_SEARCH()
Path to value within JSON document
JSON_SET()
Insert data into JSON document
JSON_TYPE()
Type of JSON value
JSON_UNQUOTE()
アンペアJSON value
JSON_VALLID()
Whether JSON value is valid
締め括りをつける
以上はMySQL操作のJSONデータタイプの操作について詳しく説明した内容の全部です。興味のある方は引き続き当駅を参照してください。mysqlデータストアプロセスパラメータの実例RedisとMySQLの違いを簡単に説明します。いくつかの比較的重要なMySQL変数など、足りないところがあれば、コメントを歓迎します。以下はMySQL操作に関する本をいくつか紹介します。参考にしてください。
MySQLデータベースの応用は入門から精通(第2版)PDFスキャン版までです。
https://www.jb51.net/books/361239.html
MySQL 5権威ガイド(第3版)中国語版PDFスキャン版
https://www.jb51.net/books/367031.html
みんなが好きになることができることを望んで、更に多くてすばらしい内容は尽きます:https://www.jb51.net/