文档章节

json表操作 & 索引

dfkjih
 dfkjih
发布于 2016/02/16 15:30
字数 368
阅读 32
收藏 0
MySQL [test]> create table t2(a json,b INT);
MySQL [test]> show create table t2;
| t2    | CREATE TABLE `t2` (
  `a` json DEFAULT NULL,
  `b` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |

MySQL [test]> insert into t2 values("[2,32,41]",33),("[3,13,2,[22,44,55]]",0);

MySQL [test]> select * from t2;
+--------------------------+------+
| a                        | b    |
+--------------------------+------+
| [2, 32, 41]              |   33 |
| [3, 13, 2, [22, 44, 55]] |    0 |
+--------------------------+------+

MySQL [test]> select a->"$[0]" from t2;
+-----------+
| a->"$[0]" |
+-----------+
| 2         |
| 3         |
+-----------+
2 rows in set (0.00 sec)

MySQL [test]> select json_extract(`a`,"$[0]") from t2;
+--------------------------+
| json_extract(`a`,"$[0]") |
+--------------------------+
| 2                        |
| 3                        |
+--------------------------+

MySQL [test]> select a->"$[3]" from t2; 
+--------------+
| a->"$[3]"    |
+--------------+
| NULL         |
| [22, 44, 55] |
+--------------+

MySQL [test]> select `a` from t2 where json_extract(`a`,"$[0]")>2;
+--------------------------+
| a                        |
+--------------------------+
| [3, 13, 2, [22, 44, 55]] |
+--------------------------+

MySQL [test]> insert into t2 values('"aa"',10);

MySQL [test]> select * from t2;
+--------------------------+------+
| a                        | b    |
+--------------------------+------+
| [2, 32, 41]              |   33 |
| [3, 13, 2, [22, 44, 55]] |    0 |
| "aa"                     |   10 |
+--------------------------+------+

MySQL [test]> delete from t2 where `a`->"$[0]" = "aa";
Query OK, 1 row affected (0.00 sec)

MySQL [test]> select * from t2;
+--------------------------+------+
| a                        | b    |
+--------------------------+------+
| [2, 32, 41]              |   33 |
| [3, 13, 2, [22, 44, 55]] |    0 |
+--------------------------+------+


1


  • 使用索引

As noted elsewhere, JSON columns cannot be indexed directly. To create an index that references such a column indirectly, you can define a generated column that extracts the information that should be indexed, then create an index on the generated column, as shown in this example:

MySQL [test]> create table t3(c json, g int generated always as (json_extract(c,"$.id")),index i (g));
Query OK, 0 rows affected (0.01 sec)

insert into t3 (c) values ('{"id": "1", "name": "Fred"}'), ('{"id": "2", "name": "Wilma"}'),('{"id": "3", "name": "Barney"}'), ('{"id": "4", "name": "Betty"}');
Query OK, 4 rows affected (0.01 sec)
Records: 4  Duplicates: 0  Warnings: 0

MySQL [test]> select * from t3;
+-------------------------------+------+
| c                             | g    |
+-------------------------------+------+
| {"id": "1", "name": "Fred"}   |    1 |
| {"id": "2", "name": "Wilma"}  |    2 |
| {"id": "3", "name": "Barney"} |    3 |
| {"id": "4", "name": "Betty"}  |    4 |
+-------------------------------+------+

MySQL [test]> select `c`->"$.id" from t3 where `g` > 2;
+-------------+
| `c`->"$.id" |
+-------------+
| "3"         |
| "4"         |
+-------------+
2 rows in set (0.00 sec)

MySQL [test]> select `c`->"$.name" from t3 where `g` > 2;  
+---------------+
| `c`->"$.name" |
+---------------+
| "Barney"      |
| "Betty"       |
+---------------+
2 rows in set (0.00 sec)



© 著作权归作者所有

共有 人打赏支持
上一篇: mysql5.7 安装
下一篇: json方法基础
dfkjih
粉丝 0
博文 23
码字总数 13951
作品 0
浦东
私信 提问
PostgreSQL是不是你的下一个JSON数据库?

根据Betteridge定律(任何头条的设问句可以用一个词来回答:不是),除非你的JSON数据很少修改,并且查询很多。 最新版的PostgreSQL添加更多对JSON的支持,我们曾经问过PostgreSQL是否可以替...

swingcoder
2015/08/09
0
0
Postgres 9.4 重要特性:jsonb 数据类型

PostgreSQL 9.4 正在加载一项新功能叫jsonb,是一种新型资料,可以储存支援GIN索引的JSON 资料。换言之,此功能,在即将来临的更新中最重要的是,如果连这都不重要的话,那就把Postgres 置于...

oschina
2014/11/17
5.5K
10
MySQL · 最佳实践 · 如何索引JSON字段

概述 MySQL从5.7.8起开始支持JSON字段,这极大的丰富了MySQL的数据类型。也方便了广大开发人员。但MySQL并没有提供对JSON对象中的字段进行索引的功能,至少没有直接对其字段进行索引的方法。...

阿里云云栖社区
2017/12/22
0
0
mysql的json特性的应用

概述 说实话,个人不是很喜欢这种特性,关系型数据库就应该有关系型数据库的样子,而不是为了留住用户而强加给他一些nosql的特性,而且还没有人家做的好,这样反而会造成一种四不像的感觉。s...

whaon
08/10
0
0
PostgreSQL何以支持丰富的NoSQL特性?

作者介绍 谭峰,网名francs,中国开源软件推进联盟PostgreSQL分会特聘专家,《PostgreSQL实战》作者之一,《PostgreSQL 9 Administration Cookbook》译者之一。现就职于浙江移动负责应用上云...

谭峰、张文升
09/26
0
0

没有更多内容

加载失败,请刷新页面

加载更多

局域网共享文件读写的实现方式

首先是设置共享目录,支持用户和密码等权限控制 然后我们可以使用Windows资源管理器操作共享目录下的文件 这中间隐藏了资源管理器帮我们建立目录映射和连接的过程,如果设置了用户名和密码,...

夏至如沫
15分钟前
2
0
Elasticsearch安装与配置

一、Docker安装ES 开发模式 可以使用以下命令快速启动Elasticsearch以进行开发或测试: $ docker run -p 9200:9200 -p 9300:9300 -d --name es -e "discovery.type=single-node" docker.ela...

吴伟祥
22分钟前
1
0
移动页面滚动穿透解决方案(荐)

移动页面滚动穿透解决方法目前有多种解决方案,我介绍下几种方案: 解决方案1:阻止冒泡。 //关键代码$(".sliders,.modals").on("touchmove",function(event){    event.preventDefau...

壹峰
22分钟前
0
0
调用infura实现java项目调用智能合约

https://infura.io/dashboard 注册一个帐号 添加一个project 可选择主网或者其他网络,然后复制地址放进pom.xml中 复制智能合约地址复制到pom.xml中 复制任意一个帐号的private key到pom.xml...

八戒八戒八戒
29分钟前
3
0
vue+koa2+token 登录验证

https://segmentfault.com/a/1190000017379244?utm_source=weekly&utm_medium=email&utm_campaign=email_weekly...

Js_Mei
33分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部