MySQL 中怎么操作JSON数据类型
今天就跟大家聊聊有关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数据类型有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注亿速云行业资讯频道,感谢大家的支持。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。