MYSQL8中怎么對JSON進(jìn)行處理

這篇文章將為大家詳細(xì)講解有關(guān)MySQL8 中怎么對JSON進(jìn)行處理,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關(guān)知識有一定的了解。

成都創(chuàng)新互聯(lián)自2013年創(chuàng)立以來,先為瓊海等服務(wù)建站,瓊海等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為瓊海企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。

首先我們的界定為什么要使用MYSQL 8 種的JSON 格式,而不是之前應(yīng)付的text type。

1 在數(shù)據(jù)輸入的時候,能進(jìn)行數(shù)據(jù)的檢測,是否符合JSON 的標(biāo)準(zhǔn)

2 數(shù)據(jù)在處理的時候,通過鍵值對的方式進(jìn)行查詢,不在需要將字段里面的數(shù)據(jù)讀取后,在進(jìn)行處理。

用一句話來講,更規(guī)范,更快速,專業(yè)的處理JSON,MYSQL OK的

為什么一個傳統(tǒng)數(shù)據(jù)庫要開始專注于處理非結(jié)構(gòu),半結(jié)構(gòu)化得數(shù)據(jù),因為需求,需求決定著一切,現(xiàn)在不同系統(tǒng)中傳輸信息的格式是什么,XML, 明文,OMG, JSON JSON JSON 。如果所有傳統(tǒng)數(shù)據(jù)庫都不能處理JSON ,那很可能,由于某些原因,某些業(yè)務(wù)場景,就不在需要什么  MYSQL ,PG 這樣的數(shù)據(jù)庫,取代的就是 MongoDB 。好在 PG 天生就是 JSON 好手, MYSQL 8 的一部分野心也是 JSON, 所以 MONGODB加油呀。

下面是一張,接受其他公司的數(shù)據(jù)的一張表。

其實MYSQL 5.7 本身也支持JSON ,之前也寫過一篇,不過那篇是惡評,太爛了。MYSQL 8 如果使用JSON 也要在 8.014版本以上,否則也會吃虧在數(shù)組方面。在MySQL 8.0中,優(yōu)化器可以執(zhí)行JSON列的局部就地更新,而不是刪除舊文檔并將整個新文檔寫入該列,當(dāng)然這也是有條件的。

CREATE TABLE `t_clue_info` (

  `id` int(11) NOT NULL AUTO_INCREMENT,

  `fk_applyid` int(11) NOT NULL COMMENT ''申請id'',

  `context` json DEFAULT NULL COMMENT ''接口結(jié)果'',

  `cdate` datetime NOT NULL COMMENT ''創(chuàng)建時間'',

  PRIMARY KEY (`id`),

  KEY `ix_fk_applyid` (`fk_applyid`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

insert into t_tmall_clue_info (fk_applyid,context,cdate) values (1982873,'{"apply_id":"cm-387237","info":"sim-093823","date":"2020-03-18 02:00:09"}',"2020-03-18 02-09-09");

MYSQL8 中怎么對JSON進(jìn)行處理

小結(jié):1 插入的JSON 的字段要必須是 JSON 的格式

           2 在插入的時候使用單引號進(jìn)行包含,里面是正確的JSON格式

我們繼續(xù)提高點(diǎn)難度,讓MYSQL中開始存儲數(shù)組

insert into t_tmall_clue_info (fk_applyid,context,cdate) values (1982823,'{"apply_id":"cm-387234","info":"sim-093856","tag":[12,34,56],"date":"2020-03-11 09:00:09"}',"2020-03-18 02-09-19");

insert into t_tmall_clue_info (fk_applyid,context,cdate) values (1982823,'{"apply_id":"cm-387234","info":"sim-093856","tag":[12,34,56],"date":"2020-03-11 09:00:09"}',"2020-03-18 02-09-19");

insert into t_tmall_clue_info (fk_applyid,context,cdate) values (1982823,'{"apply_id":"cm-387234","info":"sim-093856","tag":[12,34,56],"date":"2020-03-11 09:00:09","contant":"the informatiton is from car100"}',"2020-03-18 02-09-19");

insert into t_tmall_clue_info (fk_applyid,context,cdate) values (1982823,'{"apply_id":"cm-387234","info":"sim-093856","tag":[12,34,56],"date":"2020-03-11 09:00:09","contant":"the informatiton is from car100","add-in":"re-092878"}',"2020-03-18 02-09-19");

MYSQL8 中怎么對JSON進(jìn)行處理

如果你細(xì)心的話,就會發(fā)現(xiàn)我上面的輸入和下面的展示的地方,有點(diǎn)意思的地方,展示的時候和你的輸入的字段順序無太大關(guān)系,他會自動將一些類似的東西進(jìn)行整齊的排列(盡量),我說不上這樣做是好還是......  但看上去,絕對要比使用 text 那樣的方式要好的多,至少你一眼就可以看出JSON 里面缺哪個多哪個。

查詢的方式也,越來越有點(diǎn)意思了

SELECT * FROM t_tmall_clue_info WHERE context->>'$.info' = 'sim-093856';

MYSQL8 中怎么對JSON進(jìn)行處理

MYSQL 8 中的 Multi-Valued Indexes,其實就是為MYSQL JSON 數(shù)組而生的。一個多值索引可以有多個索引記錄。多值索引用于索引JSON數(shù)組。例

怎么在上面的表添加一個多值索。"tag":[12,34,56]

CREATE INDEX idx_tmall_tag ON t_tmall_clue_info ( (CAST(context->'$.tag' AS UNSIGNED ARRAY)) );

MYSQL8 中怎么對JSON進(jìn)行處理

SELECT * FROM t_tmall_clue_info WHERE JSON_CONTAINS(context->'$.tag',cast('[78]' AS JSON));

MYSQL8 中怎么對JSON進(jìn)行處理

SELECT * FROM t_tmall_clue_info WHERE JSON_OVERLAPS(context->'$.tag',cast('[78]' AS JSON));

MYSQL8 中怎么對JSON進(jìn)行處理

Json_contains  和  json_overlaps 之間的區(qū)別是,一個包含數(shù)組中的值某即可,另一個不行,必須是你查詢的數(shù)組的值都包含才可以。

MYSQL8 中怎么對JSON進(jìn)行處理

在添加完索引,查詢數(shù)組里面的值,是可以走索引的。

SELECT * FROM t_tmall_clue_info WHERE 78 MEMBER OF(context->'$.tag');

MYSQL8 中怎么對JSON進(jìn)行處理

當(dāng)然只查詢數(shù)組中的一個值也是可以的。

這里需要注意的幾個地方

1 如果多值鍵部分有一個空數(shù)組,則不會向索引中添加任何項,并且索引掃描無法訪問數(shù)據(jù)記錄。

2 多值索引是虛擬列上的虛擬索引,所以它們必須遵守與虛擬生成列上的二級索引相同的規(guī)則。

下面是一些其他方面的操作

如何只顯示一些需要顯示的東西,并且可以看到這里里面如果有沒有值的情況,MySQL會顯示 null

select context-> '$.tag',context-> '$.date' from t_tmall_clue_info;

MYSQL8 中怎么對JSON進(jìn)行處理

MYSQL8 中怎么對JSON進(jìn)行處理

上面兩個語句都可以顯示相關(guān)的信息,但是符號的不同

->  

->>

在展示階段相當(dāng)于將""去掉和不去掉的選擇,這樣的符號的名字叫inline path operator

其實目前我們遇到的情況,大部分的需求都是查詢,元數(shù)據(jù)是不會被修改的,所以UDPATE的事情,就下回再說吧。

MYSQL8 中怎么對JSON進(jìn)行處理

另外,即使是在MYSQL中使用非數(shù)組信息,要變成數(shù)組也是很簡單的

SELECT JSON_ARRAY(date_add(now(), interval 1 day), date_add(now(), interval 2 day), date_add(now(), interval 3 day), date_add(now(), interval 4 day), date_add(now(), interval 5 day)) as array1;

MYSQL8 中怎么對JSON進(jìn)行處理

當(dāng)然如果想把一堆值,變成 KEY VALUE  也很簡單 json_object 也可以幫助你

MYSQL8 中怎么對JSON進(jìn)行處理

關(guān)于MYSQL8 中怎么對JSON進(jìn)行處理就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

本文名稱:MYSQL8中怎么對JSON進(jìn)行處理
網(wǎng)頁路徑:http://bm7419.com/article14/gocoge.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供域名注冊、定制網(wǎng)站、虛擬主機(jī)、靜態(tài)網(wǎng)站、品牌網(wǎng)站設(shè)計、企業(yè)網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都做網(wǎng)站