文章目录
前言Mysql在5.7.8开始对json原生支持,本篇文章对mysql中使用json进行些简单的总结,希望能帮助到使用的朋友。 参考: 1.创建表和插入数据: CREATE TABLE tb_base_info ( id BIGINT NOT NULL PRIMARY KEY AUTO_INCREMENT, content JSON ); INSERT INTO tb_base_info (content) VALUES ( '{'author': 'Captain&D', 'blog': 'https://www.cnblogs.com/captainad'}' ); 2.查询json中的使用字段:其中->>为去掉查询的值的双引号,->为带着双引号。 SELECT content ->> '$.blog' FROM tb_base_info 当然json字段属性也是支持过滤的: WHERE student->'$.id' in (1,5) WHERE student->'$.id' = 1 or student->'$.id' = 5; like使用查询: where contact ->> '$.QQ' like '25%'; 如果存储的是数组的话可以支持索引查询: SELECT content ->> '$[0]' FROM tb_base_info 3.json科普:json的语法规则: (1)数据为键值对存储key:val;(2)数据由逗号分隔;(3)大括号保存对象;(4)中括号保存数组。 json数字可以是整型或者浮点型。 json对象可以包含多个键值对。 json还可以是数组的格式,[{},{}]。 json逻辑值:{ “flag”:true } 4.mysql中操作json的函数:4.1 JSON_ARRAY:生成json数组。JSON_ARRAY(val1,val2,val3...) 4.2 JSON_OBJECT:生成对象。JSON_ARRAY(val1,val2,val3...) 4.3 JSON_CONTAINS:查询指定数据是否存在。JSON_CONTAINS(json_doc, val[, path]) 举例: select name from student where json_contains(contact,''15037334666'','$.phone'); 结果说明:包含则返回1,否则返回0。如果参数为 NULL 或 path 不存在,则返回NULL 4.4 JSON_CONTAINS_PATH:查询指定路径是否存在。JSON_CONTAINS_PATH(json_doc, one_or_all, path[, path] ...) 举例: select id,name,json_contains_path(contact,'one','$.phone') from student; 说明:存在则返回1,否则返回0。one_or_all 只能取值 “one” 或 “all”,one 表示只要有一个存在即可,all表示所有的都存在才行 4.5 JSON_EXTRACT:查找指定的数据:语法: JSON_EXTRACT(json_doc, path[, path] ...) 举例: select id,name,json_extract(contact,'$.QQ') QQ from student;select id,name,json_extract(contact,'$.QQ','$.wechart') contact from student; 备注:如果抽取出多个path,则返回的数据生成一个 json array 4.6 获取json中所有的keys:JSON_KEYS(json_doc[, path]) 举例: select id,name,json_keys(contact) contact from student; 4.7 JSON_UNQUOTE:去掉 json 值的引号'JSON_UNQUOTE(val) 举例: select id,name,json_unquote(json_extract(contact,'$.QQ')) QQ from student; 总结当然mysql中还有其他未使用的json函数,但是可能并不会很常用,因为mysql的计算能力很差,在真正的开发中我们还是要尽量的减少mysql的计算,尽可能的把业务计算放到业务代码中取实现。 |
|
来自: Fengsq501u81r4 > 《计算机》