今天就跟大家聊聊有關(guān)MySQL 中怎么操作JSON數(shù)據(jù)類型,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。
讓客戶滿意是我們工作的目標,不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價值的長期合作伙伴,公司提供的服務(wù)項目有:申請域名、網(wǎng)站空間、營銷軟件、網(wǎng)站建設(shè)、科爾沁右翼中網(wǎng)站維護、網(wǎng)站推廣。
創(chuàng)建一個 JSON 字段的表
首先先創(chuàng)建一個表,這個表包含一個 json 格式的字段:
CREATE TABLE table_name ( id INT NOT NULL AUTO_INCREMENT, json_col JSON, PRIMARY KEY(id) );
上面的語句,主要注意 json_col 這個字段,指定的數(shù)據(jù)類型是 JSON。
插入一條簡單的 JSON 數(shù)據(jù)
INSERT INTO table_name (json_col) VALUES ( '{"City": "Galle", "Description": "Best damn city in the world"}' );
上面這個 SQL 語句,主要注意 VALUES 后面的部分,由于 json 格式的數(shù)據(jù)里,需要有雙引號來標識字符串,所以,VALUES 后面的內(nèi)容需要用單引號包裹。
插入一條復(fù)雜的 JSON 數(shù)據(jù)
INSERT INTO table(col) VALUES( '{"opening":"Sicilian","variations":["pelikan","dragon","najdorf"]}' );
這地方,我們插入了一個 json 數(shù)組。主要還是注意單引號和雙引號的問題。
修改 JSON 數(shù)據(jù)
之前的例子中,我們插入了幾條 JSON 數(shù)據(jù),但是如果我們想修改 JSON 數(shù)據(jù)里的某個內(nèi)容,怎么實現(xiàn)了?比如我們向 variations 數(shù)組里增加一個元素,可以這樣:
UPDATE myjson SET dict=JSON_ARRAY_APPEND(dict,'$.variations','scheveningen') WHERE id = 2;
這個 SQL 語句中,$ 符合代表 JSON 字段,通過. 號索引到 variations 字段,然后通過 JSON_ARRAY_APPEND 函數(shù)增加一個元素?,F(xiàn)在我們執(zhí)行查詢語句:
SELECT * FROM myjson
得到的結(jié)果是:
+----+-----------------------------------------------------------------------------------------+ | id | dict | +---+-----------------------------------------------------------------------------------------+ | 2 | { "opening" : "Sicilian" , "variations" : [ "pelikan" , "dragon" , "najdorf" , "scheveningen" ]} | +----+-----------------------------------------------------------------------------------------+ 1 row in set ( 0.00 sec)
關(guān)于 MySQL 中,JSON 數(shù)據(jù)的獲取方法,參照官方鏈接 JSON Path Syntax
創(chuàng)建索引
MySQL 的 JSON 格式數(shù)據(jù)不能直接創(chuàng)建索引,但是可以變通一下,把要搜索的數(shù)據(jù)單獨拎出來,單獨一個數(shù)據(jù)列,然后在這個字段上鍵一個索引。下面是官方的例子:
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 上。
字符串轉(zhuǎn) JSON 格式
把 json 格式的字符串轉(zhuǎn)換成 MySQL 的 JSON 類型:
SELECT CAST('[1,2,3]' as JSON) ; SELECT CAST('{"opening":"Sicilian","variations":["pelikan","dragon","najdorf"]}' as JSON);
所有 MYSQL JSON 函數(shù)
Name Description 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
看完上述內(nèi)容,你們對MySQL 中怎么操作JSON數(shù)據(jù)類型有進一步的了解嗎?如果還想了解更多知識或者相關(guān)內(nèi)容,請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝大家的支持。
網(wǎng)站名稱:MySQL中怎么操作JSON數(shù)據(jù)類型
本文網(wǎng)址:http://www.rwnh.cn/article14/jeppde.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計公司、品牌網(wǎng)站制作、App開發(fā)、網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計公司、營銷型網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)