1.1.1. JSON类型数据存储

新建表

create table json_user (

uid int auto_increment,

data json,

primary key(uid)

);

插入数据

insert into json_user values (

null, '{

"name":"lison",

"age":18,

"address":"enjoy"

}' );

insert into json_user values (

null,

'{

"name":"james",

"age":28,

"mail":"james@163.com"

}');

1.1.1.2. JSON函数

1.1.1.2.1. json_extract 抽取

select json_extract('[10, 20, [30, 40]]', '$[1]');

  -- 10

select

json_extract(data, '$.name'),

json_extract(data, '$.address')

from json_user;

  --取出json类型字段中,name跟address

1.1.1.2.2. JSON_OBJECT 将对象转为json

select json_object("name", "enjoy", "email", "enjoy.com", "age",35);

insert into json_user values (

null,

json_object("name", "王五", "email", "wangwu@qq.com", "age",18) );

1.1.1.2.3. json_insert 插入数据

语法:JSON_INSERT(json_doc, path, val[, path, val] ...)

set @json = '{ "a": 1, "b": [2, 3]}';

  -- @json局部   ;    -- @@json全局

select json_insert(@json, '$.a', 10, '$.c', '[true, false]');

  -- 当前语句:更新或者修改(数据已存在更新,没有的插入)

update json_user set data = json_insert(data, "$.address_2", "xiangxue") where uid = 1;

1.1.1.2.4. json_merge 合并数据并返回

select json_merge('{"name": "enjoy"}', '{"id": 47}');

select

json_merge(

json_extract(data, '$.address'),

json_extract(data, '$.address_2')

)

from json_user where uid = 1;

  -- 将当前用户的两个地址合并

1.1.1.2.5. 其他函数:

https://dev.mysql.com/doc/refman/5.7/en/json-function-reference.html

1.1.2. JSON索引

JSON 类型数据本身 无法直接 创建索引,需要将需要索引的 JSON数据 重新 生成虚拟列(Virtual Columns) 之后,对 该列 进行 索引

create table test_inex_1(

data json,

gen_col varchar(10) generated always as (json_extract(data, '$.name')),

index idx (gen_col)

);

insert into test_inex_1(data) values ('{"name":"king", "age":18, "address":"cs"}');

insert into test_inex_1(data) values ('{"name":"peter", "age":28, "address":"zz"}');

select * from test_inex_1;

疑问:这条sql查询的结果是?

select json_extract(data,"$.name") as username from test_inex_1 where gen_col="king";

select json_extract(data,"$.name") as username from test_inex_1 where gen_col='"king"';

explain select json_extract(data,"$.name") as username from test_index_1 where gen_col="king"

查阅官方文档,建立虚拟列,这个列查询的时候不需要加上“”符号

create table test_index_2 (

data json,

gen_col varchar(10) generated always as (

json_unquote(

json_extract(data, "$.name")

)),

key idx(gen_col)

);

insert into test_index_2(data) values ('{"name":"king", "age":18, "address":"cs"}');

insert into test_index_2(data) values ('{"name":"peter", "age":28, "address":"zz"}');

select json_extract(data,"$.name") as username from test_index_2 where gen_col="king";

MySQL中存储json格式数据的更多相关文章

  1. 关于mysql中存储json数据的读取问题

    在mysql中存储json数据,字段类型用text,java实体中用String接受. 返回前端时(我这里返回前端的是一个map),为了保证读取出的数据排序错乱问题,定义Map时要用LinkedHas ...

  2. 在JSP页面中输出JSON格式数据

    JSON-taglib是一套使在JSP页面中输出JSON格式数据的标签库. JSON-taglib主页: http://json-taglib.sourceforge.net/index.html J ...

  3. JSON(三)——java中对于JSON格式数据的解析之json-lib与jackson

    java中对于JSON格式数据的操作,主要是json格式字符串与JavaBean之间的相互转换.java中能够解析JSON格式数据的框架有很多,比如json-lib,jackson,阿里巴巴的fast ...

  4. Android中解析JSON格式数据常见方法合集

    待解析的JSON格式的文件如下: [{"id":"5", "version":"1.0", "name&quo ...

  5. python向mysql中存储JSON及Nodejs取出

    虽然把JSON数据存入mysql也是比较蛋疼,但是相比使用Nodejs嵌套处理多个mysql查询并拼接返回数据也算是没mongo时的一个折中方案了. 我使用python拼接了一个json格式的字符串, ...

  6. IT项目中使用 json格式数据 保存项目配置信息, 在配置文件再读取json文件的内容进行赋值

    json格式小巧玲珑,适合做配置文件,特别是大型项目中, 可以将配置信息分类保存到不同的json文件中, 然后再在配置文件中读取配置文件的数据进行赋值, 这里以python为例进行说明: 假设在you ...

  7. android 中解析json格式数据

    本文来自http://tonysun3544.iteye.com/category/188238 package com.tony.json; import android.app.Activity; ...

  8. Mysq 列中存储json格式根据key取value

    SELECT DISTINCT (SUBSTRING_INDEX( REPLACE ( 列名称, CONCAT( SUBSTRING_INDEX( 列名称, '"key名称":', ...

  9. Bash中使用MySQL导入导出CSV格式数据[转]

    转自: http://codingstandards.iteye.com/blog/604541 MySQL中导出CSV格式数据的SQL语句样本如下:   select * from test_inf ...

随机推荐

  1. 【工具】之001-CentOS7 最小化安装配置

    写在前面 我很懒,,,不想敲一个命令一个命令敲... "偷懒是有前提的,不是之前,就是之后." 简述 CentOS 7 最小化安装版本:CentOS-7-x86_64-Minima ...

  2. Bytom侧链Vapor源码浅析-节点出块过程

    Bytom侧链Vapor源码浅析-节点出块过程 在这篇文章中,作者将从Vapor节点的创建开始,进而拓展讲解Vapor节点出块过程中所涉及的源码. 做为Vapor源码解析系列的第一篇,本文首先对Vap ...

  3. Python 为什么能支持任意的真值判断?

    本文出自"Python为什么"系列,请查看全部文章 Python 在涉及真值判断(Truth Value Testing)时,语法很简便. 比如,在判断某个对象是否不为 None ...

  4. java Iterator迭代器

    一 Iterator迭代器概述 java中提供了很多个集合,它们在存储元素时,采用的存储方式不同.我们要取出这些集合 中的元素,可通过一种通用的获取方式来完成. Collection集合元素的通用获取 ...

  5. Spring Boot 教程 - MyBatis-Plus

    1. Mybatis-Plus简介 MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发.提高效率而生. 为什么说Myba ...

  6. Elasticsearch聚合语句

    聚合的范围是search query过滤出的数据 四种聚合类型: 一.Bucketing 桶聚合,常规的分类然后计算每个分类的文档数量 二.Metric 分类并对一组文档进行sum.avg等数学运算 ...

  7. 非确定性有穷状态决策自动机练习题Vol.2 C. 奇袭

    非确定性有穷状态决策自动机练习题Vol.2 C. 奇袭 题目描述 由于各种原因,桐人现在被困在\(Under World\)(以下简称\(UW\))中,而\(UW\)马上 要迎来最终的压力测试--魔界 ...

  8. 第8章 Spark SQL实战

    第8章 Spark SQL实战 8.1 数据说明 数据集是货品交易数据集. 每个订单可能包含多个货品,每个订单可以产生多次交易,不同的货品有不同的单价. 8.2 加载数据 tbStock: scala ...

  9. openvswitch 监听端口变化

    命令: ovsdb-client monitor Interface name,ofport,external_ids --format=json 运行效果: [root@ostack1 ~]# ov ...

  10. 第5篇 Scrum冲刺博客

    1.站立式会议 1.1 会议图片 1.2 项目进展 成员 昨日任务 今日计划完成任务 陈忠明 歌曲信息的上传/下载包 歌曲批量下载压缩包 吴茂平 完善评论系统 新消息提醒功能设计 黄海钊 修改代码规范 ...