MySQL5.7新特性之JSON类型-阿里云开发者社区

开发者社区> 数据库> 正文

MySQL5.7新特性之JSON类型

简介: 随着NOSQL数据库的广泛应用,可扩展的存储方式在关系型数据库中也有了很好的支持,最新的MySQL5.

随着NOSQL数据库的广泛应用,可扩展的存储方式在关系型数据库中也有了很好的支持,最新的MySQL5.7中就新增加了一个数据类型:JSON


使用示例:

插入一条数据

insert into vince.test(`data`) values('{"name":"tomcat","age":15}');

更新数据

UPDATE `vince`.`test` SET `data` = '{"name":"vincent","age":14}' WHERE `id` = 1;

查询JSON里的值
#利用JSON方法查询
select JSON_EXTRACT(data,'$.name'),JSON_EXTRACT(data,'$.age') from vince.test;
返回结果

可以看出JSON被解析拆分,但对于字符串会保留双引号,这种是利用函数方法进行JSON提取的,还可以利用虚列virtual

#将JSON中的某一属性设置为虚列
alter table vince.test add test_name varchar(128) generated always as (JSON_EXTRACT(data,'$.name')) virtual;
有了虚列后就可以直接用虚列作为条件查询

select test_name from vince.test;

#根据虚列查询
explain select * from vince.test where test_name='vince';

select * from vince.test where test_name='"vincent"';

通过执行计划可以看出是否走索引和where条件,对于虚列还可以增加索引,就像普通的列一样,不过更新时不需要对虚列再进行更新,直接更新JSON的内容后,虚列会同步更新,因为虚列其实就是个引用,不会冗余存储

增加虚列的SQL:

alter table vince.test add index index_virtual (test_name);
再用执行计划查看是否走索引

explain select * from vince.test where test_name='vince';

从结果上看已经走索引了,优化效果达到

版权声明:本文首发在云栖社区,遵循云栖社区版权声明:本文内容由互联网用户自发贡献,版权归用户作者所有,云栖社区不为本文内容承担相关法律责任。云栖社区已升级为阿里云开发者社区。如果您发现本文中有涉嫌抄袭的内容,欢迎发送邮件至:developer2020@service.aliyun.com 进行举报,并提供相关证据,一经查实,阿里云开发者社区将协助删除涉嫌侵权内容。

分享:
数据库
使用钉钉扫一扫加入圈子
+ 订阅

分享数据库前沿,解构实战干货,推动数据库技术变革

其他文章