的功能可以对JSON中的部分数据进行索引
CREATE TABLE `employe` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(18) DEFAULT NULL, `sex` int DEFAULT NULL, `others` json DEFAULT NULL, `time` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT ‘录入时间‘, PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=42334 DEFAULT CHARSET=utf8mb4;
文章插图
获取JSON中的某个字段的风格与alibaba中fastjson中的JSONPath类似,但是功能与之相差甚远:
其中支持json的主要函数如下表:或见https://dev.mysql.com/doc/refman/5.7/en/json-function-reference.html
文章插图
简单列一下常用操作,便于记忆:
虚拟列:虚拟列类似于视图,将others字段中的address提取出来作为一个虚拟列address,当others字段中的address发生改变时,虚拟列会同时改变 。
ALTER TABLE employe ADD address varchar(128) GENERATED ALWAYS AS (json_extract(others,‘$.address‘)) VIRTUAL;
文章插图
若去掉address列的引号可用replace替换:
ALTER TABLE employe ADD address varchar(128) GENERATED ALWAYS AS (REPLACE(json_extract(others,‘$.address‘),""",‘‘)) VIRTUAL;
可对该虚拟字段进行查询:
select * from employe where address="北京昌平";
在MySQL 5.7中,支持两种generated column,即virtual generated column和stored generated column,前者只将generated column保存在数据字典中(表的元数据),并不会将这一列数据持久化到磁盘上;后者会将generated column持久化到磁盘上,而不是每次读取的时候计算所得 。很明显,后者存放了可以通过已有数据计算而得的数据,需要更多的磁盘空间,与virtual column相比并没有优势,因此,MySQL 5.7中,不指定generated column的类型,默认是virtual column 。
虚拟索引:虚拟列与普通列类似可创建索引,虚拟索引列也是通过传统的B+树索引即可实现对JSON格式部分属性的快速查询 。使用方法是首先创建该虚拟列,然后在该虚拟列上创建索引:
alter table employe add INDEX add_index(address); 在创建索引后执行语句select * from employe where address="北京昌平";如下图,发现使用到了索引:
文章插图
效率问题:关于效率方面,使用json报错或将json转化为多表存储的效率对比参考https://www.cnblogs.com/lkpnotice/p/6903187.html
mysql与Json学习总结
- insert mysql数据库介绍:创建和读取(select)数据库的数据
- 35岁女人必学的呢大衣腰带系法教程,看着优雅还显瘦,简单易学
- ps2020文字教程:制作各种光效图案,超简单!
- 学习猿地 PHP教程 20 PHP连接MySQL 4.修改数据操作
- C#如何动态创建MySql数据库和表
- mysql:数据库之外键的两个作用及总结
- MySQL云数据库创建、配置与使用教程
- 钓鱼教程:选择夜钓时应该如何调漂
- 几分钟手抄报教程,法制宣传手抄报,喜欢的朋友快来收藏下吧
- iOS 14降级教程:教你重回iOS 13,再也不怕微信不能复制信息了!_百度...