日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

MySQL操作之JSON数据类型操作详解

發布時間:2025/3/12 数据库 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MySQL操作之JSON数据类型操作详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

MySQL操作之JSON數據類型操作詳解

這篇文章主要介紹了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 INTOtable_name (json_col) VALUES('{"City": "Galle", "Description": "Best damn city in the world"}');

上面這個SQL語句,主要注意VALUES后面的部分,由于json格式的數據里,需要有雙引號來標識字符串,所以,VALUES后面的內容需要用單引號包裹。

插入一條復雜的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字段,通過.號索引到variations字段,然后通過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 Syntax

創建索引

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: 0mysql> 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: 1select_type: SIMPLEtable: jemppartitions: NULLtype: range possible_keys: ikey: ikey_len: 5ref: NULLrows: 2filtered: 100.00Extra: Using where 1 row in set, 1 warning (0.00 sec)mysql> SHOW WARNINGS\G *************************** 1. row ***************************Level: NoteCode: 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函數

NameDescription
JSON_APPEND()Append data to JSON document
JSON_ARRAY()Create JSON array
JSON_ARRAY_APPEND()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 unquoting the result; equivalent to JSON_UNQUOTE(JSON_EXTRACT()).
JSON_INSERT()Insert data into JSON document
JSON_KEYS()Array of keys from JSON document
JSON_LENGTH()Number of elements in JSON document
JSON_MERGE()Merge JSON documents, preserving duplicate keys. Deprecated synonym for JSON_MERGE_PRESERVE()
JSON_MERGE_PRESERVE()Merge JSON documents, preserving duplicate keys
JSON_OBJECT()Create JSON object
JSON_QUOTE()Quote 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()Unquote JSON value
JSON_VALID()Whether JSON value is valid

總結

以上是生活随笔為你收集整理的MySQL操作之JSON数据类型操作详解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。