前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >mysql5.7强势支持原生json格式!!全面掌握

mysql5.7强势支持原生json格式!!全面掌握

作者头像
后端技术探索
发布2018-08-09 15:35:16
7150
发布2018-08-09 15:35:16
举报
文章被收录于专栏:后端技术探索后端技术探索

mysql一直是如此优秀,但是随着最近一些nosql的强劲发展,甚为关系型数据库的mysql,也不例外在某些层面稍有逊色。其中,是否支持json格式是最常被用来比较的。

终于mysql5.7.7+版本,innodb引擎也可以支持原生Json了,而且不是粗略支持,是全面强大的支持,各种json处理函数满足你所有对json操作的场景。它不是简单的类似BLOB的替换,它不是以字符串格式存储,而是以内部的二进制格式存储,这样支持可以快速访问json数据;并且在创建时会自动校验是否合法json格式;而且这种原生的json type可以进行 =, <, <=, >, >=, <>, !=, 和 <=> 运算符的比较。

我们来通过实例来认识它,对它所提供的功能有个全面的了解。

首先你要升级你的mysql版本到5.7的最新GA版,升级方法可以参考本公众号的上一篇文章(关注公众号可获取)。

代码语言:javascript
复制
1.新建数据表

# 新建test1表

create table test_57.test1 (

`id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',

`info` JSON NULL,

primary key (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='测试5.7版本json格式';


2.插入json数据

#insert into test_57.test1 (info) values('{"name":"yuhaiwei","age":18,"hobby":"swim,reading,writting"}');

#insert into test_57.test1 (info) values('{"name":"tangwei","age":28,"hobby":"show,song,movie"}');


3.json 函数详解

#json_array 数组json串

#insert into test57.test1 (info) values (json_array('"testname', 99, 'basketball'));


#json_object 对象json串

#insert into test_57.test1 (info) values (json_object('name','"json_object_test_name"', 'age',99, 'hobby','basketball'));


#JSON_MERGE(json_doc, json_doc[, json_doc] ...) 合并json

select json_merge('[{"name":"yhw"},{"name":"test"}]', '{"name":"test1"}');


#json_type 判断json类型,是数组还是对象

select json_type(info) from test_57.test1;


#JSON_VALID(val) 判断是否合法json

select info,json_valid(info) from test_57.test1;


#json_quote  用双引号括起来,并对json中的一些特殊字符转义

insert into test_57.test1 (info) values((('{"name":"noquote_name","age":18,"hobby":"swim,reading,writting"}')));


#JSON_UNQUOTE(val) 和 json_quote相反

#JSON_EXTRACT(json_doc, path[, path] ...) 查询出json的属性值 $-整个json,$[0]-json数组第一个元素,$.name-json的name属性值

select info,json_extract(info, '$.name') from test_57.test1;


# ->符号 ,作用等同于 json_extract

select info->'$.name' from test_57.test1 limit 1;


# JSON_SET(json_doc, path, val[, path, val] ...) 替换json串中的值, 有新属性值会添加

select json_set(info, '$.name', 'yuhaiweiset', '$.age', 11, '$.key1', 'value1') from test_57.test1 limit 1;

# json_insert 添加值(不替换),用法同json_set

# json_replace 替换值 (不添加),用法同json_set


# json_remove 删除

select json_remove(info, '$.name', '$.age', '$.name') from test_57.test1 limit 1;


#JSON_CONTAINS(json_doc, val[, path]) json_doc的path值 是否包含val

SELECT JSON_CONTAINS('{"a": 1, "b": 2, "c": {"d": 4}}', '{"d": 4}', '$.c'); #结果 1


#JSON_CONTAINS_PATH(json_doc, one_or_all, path[, path] ...) json_doc是否包含路径path,第二个参数为one 只要包含一个就返回true

SET @j = '{"a": 1, "b": 2, "c": {"d": 4}}';

SELECT JSON_CONTAINS_PATH(@j, 'one', '$.a', '$.e'); #结果 1

SELECt JSON_CONTAINS_PATH(@j, 'all', '$.a', '$.e'); #结果 0


#json_keys(json,[,path]) json的path路径的所有属性名

SELECT JSON_KEYS('{"a": 1, "b": {"c": 30}}', '$.b'); #结果["c"]


#JSON_SEARCH(json_doc, one_or_all, search_str[, escape_char[, path] ...]) 返回search_str在json_doc的path路径下的全路径

SET @j = '["abc", [{"k": "10"}, "def"], {"x":"abc"}, {"y":"bcd"}]';

SELECT JSON_SEARCH(@j, 'all', '%b%', NULL, '$[2]'); #结果 "$[2].x"


#JSON_ARRAY_APPEND(json_doc, path, val[, path, val] ...) 在最后添加子节点

SELECT JSON_ARRAY_APPEND('{"a": 1, "b": [2, 3], "c": 4}', '$.b[0]', 'y'); # 结果{"a": 1, "b": [[2, "y"], 3], "c": 4}


#JSON_ARRAY_INSERT(json_doc, path, val[, path, val] ...) 在前面添加兄弟节点

SELECT JSON_ARRAY_INSERT('{"a": 1, "b": [2, 3], "c": 4}', '$.b[0]', 'y'); # 结果{"a": 1, "b": ["y", 2, 3], "c": 4}


#JSON_DEPTH(json_doc) json深度

SELECT JSON_DEPTH('{}'), JSON_DEPTH('[]'), JSON_DEPTH('true'), JSON_DEPTH('[10, 20]'), JSON_DEPTH('[[], {}]'); #结果:1 1 1 2 2


#JSON_LENGTH(json_doc[, path]) json的长度,不包括嵌套的子元素的长度

SELECT JSON_LENGTH('[1, 2, {"a": 3}]'); #结果:3

SELECT JSON_LENGTH('{"a": 1, "b": {"c": 30}}', '$.b') #结果 1

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2015-11-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 nginx 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档