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. java_数组的定义与操作

    数组定义和访问 数组概念 数组概念: 数组就是存储多个数据的容器,数组的长度固定,多个数据的数据类型要一致. 数组的定义 方式一 数组存储的数据类型[] 数组名字 = new 数组存储的数据类型[长度 ...

  2. Java Redis系列3(Jedis的使用+jedis连接池技术)

    Jedis的使用 什么是Jedis? 一款Java操作redis数据库的工具 使用步骤 1.下载redis所需的java包 2.使用步骤 import org.junit.Test; public c ...

  3. HttpClient 模拟用户操作

    首先模拟用户登录: /** * 模拟用户登录 * */ private void login() throws HttpException, IOException { PostMethod logi ...

  4. java 网络通信协议、UDP与TCP

    一 网络通信协议 通过计算机网络可以使多台计算机实现连接,位于同一个网络中的计算机在进行连接和通信时需要遵守一定 的规则,这就好比在道路中行驶的汽车一定要遵守交通规则一样.在计算机网络中,这些连接和通 ...

  5. python设计模式之原型模式

    python设计模式之原型模式 ​ 对于原型模式而言,其中最主要的部分就是关于一个对象的复制,其中就包含两个方面:1.浅复制:2.深复制.具体的区别请看我相关的随笔.这里简略的说明一下,浅复制就等于对 ...

  6. 深入理解 Java 内存模型 JMM 与 volatile

    Java 内存模型(Java Memory Model,简称 JMM)是一种抽象的概念,并不真实存在,它描述的是一组规范或者规则,通过这种规范定义了程序中各个变量(包括实例字段.静态字段和构成数组对象 ...

  7. linux 修改 mac

    ifconfig eth0 hw ether fa::3d:c3:: 或 ip link set dev eth0 address fa::3d:c3::

  8. sqlalchemy怎么order_by降序/升序并取第一条数据

    原文链接:https://blog.csdn.net/mark4541437/article/details/103755721 sqlalchemy怎么order_by降序/升序并取第一条数据 fr ...

  9. 在KVM主机和虚拟机之间共享目录

    执行以下步骤: (1)在host OS上面创建新的目录和在这个目录里面创建一个文件. root@kvm:~# mkdir /tmp/shared root@kvm:~# touch /tmp/shar ...

  10. Python 源代码代码打包成 whl 文件

    1.检查 python setup.py check 2.打包 python setup.py sdist bdist_wheel || true