今天就跟大家聊聊有关MySQL 中怎么操作JSON数据类型,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

创建一个 JSON 字段的表

首先先创建一个表,这个表包含一个 json 格式的字段:

CREATETABLEtable_name(idINTNOTNULLAUTO_INCREMENT,json_colJSON,PRIMARYKEY(id));

上面的语句,主要注意 json_col 这个字段,指定的数据类型是 JSON。

插入一条简单的 JSON 数据

INSERTINTOtable_name(json_col)VALUES('{"City":"Galle","Description":"Bestdamncityintheworld"}');

上面这个 SQL 语句,主要注意 VALUES 后面的部分,由于 json 格式的数据里,需要有双引号来标识字符串,所以,VALUES 后面的内容需要用单引号包裹。

插入一条复杂的 JSON 数据

INSERTINTOtable(col)VALUES('{"opening":"Sicilian","variations":["pelikan","dragon","najdorf"]}');

这地方,我们插入了一个 json 数组。主要还是注意单引号和双引号的问题。

修改 JSON 数据

之前的例子中,我们插入了几条 JSON 数据,但是如果我们想修改 JSON 数据里的某个内容,怎么实现了?比如我们向 variations 数组里增加一个元素,可以这样:

UPDATEmyjsonSETdict=JSON_ARRAY_APPEND(dict,'$.variations','scheveningen')WHEREid=2;

这个 SQL 语句中,$ 符合代表 JSON 字段,通过. 号索引到 variations 字段,然后通过 JSON_ARRAY_APPEND 函数增加一个元素。现在我们执行查询语句:

SELECT*FROMmyjson

得到的结果是:

+----+-----------------------------------------------------------------------------------------+|id|dict|+---+-----------------------------------------------------------------------------------------+|2|{"opening":"Sicilian","variations":["pelikan","dragon","najdorf","scheveningen"]}|+----+-----------------------------------------------------------------------------------------+1rowinset(0.00sec)

关于 MySQL 中,JSON 数据的获取方法,参照官方链接 JSON Path Syntax

创建索引

MySQL 的 JSON 格式数据不能直接创建索引,但是可以变通一下,把要搜索的数据单独拎出来,单独一个数据列,然后在这个字段上键一个索引。下面是官方的例子:

mysql>CREATETABLEjemp(->cJSON,->gINTGENERATEDALWAYSAS(c->"$.id"),->INDEXi(g)->);QueryOK,0rowsaffected(0.28sec)mysql>INSERTINTOjemp(c)VALUES>('{"id":"1","name":"Fred"}'),('{"id":"2","name":"Wilma"}'),>('{"id":"3","name":"Barney"}'),('{"id":"4","name":"Betty"}');QueryOK,4rowsaffected(0.04sec)Records:4Duplicates:0Warnings:0mysql>SELECTc->>"$.name"ASname>FROMjempWHEREg>2;+--------+|name|+--------+|Barney||Betty|+--------+2rowsinset(0.00sec)mysql>EXPLAINSELECTc->>"$.name"ASname>FROMjempWHEREg>2\G***************************1.row***************************id:1select_type:SIMPLEtable:jemppartitions:NULLtype:rangepossible_keys:ikey:ikey_len:5ref:NULLrows:2filtered:100.00Extra:Usingwhere1rowinset,1warning(0.00sec)mysql>SHOWWARNINGS\G***************************1.row***************************Level:NoteCode:1003Message:/*select#1*/selectjson_unquote(json_extract(`test`.`jemp`.`c`,'$.name'))AS`name`from`test`.`jemp`where(`test`.`jemp`.`g`>2)1rowinset(0.00sec)

这个例子很简单,就是把 JSON 字段里的 id 字段,单独拎出来成字段 g,然后在字段 g 上做索引,查询条件也是在字段 g 上。

字符串转 JSON 格式

把 json 格式的字符串转换成 MySQL 的 JSON 类型:

SELECTCAST('[1,2,3]'asJSON);SELECTCAST('{"opening":"Sicilian","variations":["pelikan","dragon","najdorf"]}'asJSON);

所有 MYSQL JSON 函数

NameDescriptionJSON_APPEND()AppenddatatoJSONdocumentJSON_ARRAY()CreateJSONarrayJSON_ARRAY_APPEND()AppenddatatoJSONdocumentJSON_ARRAY_INSERT()InsertintoJSONarray->ReturnvaluefromJSONcolumnafterevaluatingpath;equivalenttoJSON_EXTRACT().JSON_CONTAINS()WhetherJSONdocumentcontainsspecificobjectatpathJSON_CONTAINS_PATH()WhetherJSONdocumentcontainsanydataatpathJSON_DEPTH()MaximumdepthofJSONdocumentJSON_EXTRACT()ReturndatafromJSONdocument->>ReturnvaluefromJSONcolumnafterevaluatingpathandunquotingtheresult;equivalenttoJSON_UNQUOTE(JSON_EXTRACT()).JSON_INSERT()InsertdataintoJSONdocumentJSON_KEYS()ArrayofkeysfromJSONdocumentJSON_LENGTH()NumberofelementsinJSONdocumentJSON_MERGE()MergeJSONdocuments,preservingduplicatekeys.DeprecatedsynonymforJSON_MERGE_PRESERVE()JSON_MERGE_PRESERVE()MergeJSONdocuments,preservingduplicatekeysJSON_OBJECT()CreateJSONobjectJSON_QUOTE()QuoteJSONdocumentJSON_REMOVE()RemovedatafromJSONdocumentJSON_REPLACE()ReplacevaluesinJSONdocumentJSON_SEARCH()PathtovaluewithinJSONdocumentJSON_SET()InsertdataintoJSONdocumentJSON_TYPE()TypeofJSONvalueJSON_UNQUOTE()UnquoteJSONvalueJSON_VALID()WhetherJSONvalueisvalid

看完上述内容,你们对MySQL 中怎么操作JSON数据类型有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注亿速云行业资讯频道,感谢大家的支持。