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. 【JavaScript】windows.open用法详解

    windows.open("URL","窗口名称","窗口外观设定");的用法详解 function onNewWindows(redire ...

  2. 工作小记[csv文件、admin中filed与list_display区别、ModuleNotFoundError: No module named'xxx'、django创建admin用户]

    CSV-Comma Separated Values,CSV文件可以直接用Excel表格打开,如果用文本打开属性之间用逗号隔开,Python有直接操作CSV文件的函数. fileds字段控制“修改添加 ...

  3. C#LeetCode刷题之#326-3的幂(Power of Three)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3867 访问. 给定一个整数,写一个函数来判断它是否是 3 的幂次 ...

  4. 微博AnalysisQl动态数据视图元数据设计

    前言 目前,AnalysisQl 数据视图的元数据(维度.指标.指标计算器)需要通过代码(API)或资源文件的形式硬编码,应用启动时,按照声明的顺序依次注册.这种模式下,数据视图是 静态 的,任何一项 ...

  5. golang 数据类型/基础语法

    常量 变量 复合类型 结构体 数组 基础类型 整型 浮点型 复数 bool 值 字符型 字符串 错误(稍微有异议) 引用类型 切片 指针 字典 管道 函数 接口 其他语法结构 包 流程控制 运算符 注 ...

  6. 水题大战Vol.3 B. DP搬运工2

    水题大战Vol.3 B. DP搬运工2 题目描述 给你\(n,K\),求有多少个\(1\)到\(n\) 的排列,恰好有\(K\)个数\(i\) 满足\(a_{i-1},a_{i+1}\) 都小于\(a ...

  7. hge引擎示例教程cmake项目

    hge引擎的示例代码在vs2017不能很好的运行,需要调不少东西,所以我将其重新整理成cmake的项目. 所有示例均在vs2017 msvc 下测试可以正常运行. 由于缺少libhgehelp.a所以 ...

  8. Pycharm 2020.01亲测激活到2089年

    Pycharm 2020.01亲测激活到2089年,注意是2020.01版本. 下载jetbrains-agent.jar 链接: https://pan.baidu.com/s/1w1i15pT38 ...

  9. C/C++ 程序反调试的方法

    C/C++ 要实现程序反调试有多种方法,BeingDebugged,NtGlobalFlag,ProcessHeap,CheckRemoteDebuggerPresent,STARTUPINFO,Is ...

  10. ES6中的变量的解构赋值, 解放我们的双手,实现变量的批量赋值

    ES6--变量的解构赋值 引言 正文 一.数组的解构赋值 解构失败 不完全解构 默认值 二.对象的解构赋值 三.字符串的解构赋值 结束语 引言 变量的解构赋值, 听起来很复杂, 简单点说可以理解成批量 ...