文档章节

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)



© 著作权归作者所有

共有 人打赏支持
dfkjih
粉丝 0
博文 23
码字总数 13951
作品 0
浦东
PostgreSQL是不是你的下一个JSON数据库?

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

swingcoder
2015/08/09
0
0
MySQL · 最佳实践 · 如何索引JSON字段

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

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

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

whaon
08/10
0
0
MySQL EXPLAIN Output Format

Explain语句提供了一个select语句执行计划的信息。 Explain为每个用了select语句的表,返回一行信息。它列出了表中的顺序输出,MySQL会读取他们,然后再处理。MySQL解决了所有使用嵌套循环连...

IT--小哥
2016/12/09
393
2
PostgreSQL 的一些你可能不知道但应该尝试的功能

PostgreSQL包含许多重要的功能。他们中的许多人都非常知名。其他人可以是非常有用的,但没有广泛赞赏。以下是我们首选的PostgreSQL功能,您可能没有仔细看过,但实际上应该这样做,因为它们可...

oschina
06/27
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Qt编写自定义控件属性设计器

以前做.NET开发中,.NET直接就集成了属性设计器,VS不愧是宇宙第一IDE,你能够想到的都给你封装好了,用起来不要太爽!因为项目需要自从全面转Qt开发已经6年有余,在工业控制领域,有一些应用...

飞扬青云
31分钟前
1
0
我为什么用GO语言来做区块链?

Go语言现在常常被用来做去中心化系统(decentralised system)。其他类型的公司也都把Go用在产品的核心模块中,并且它在网站开发中也占据了一席之地。 我们在决定做Karachain的时候,考量(b...

HiBlock
36分钟前
1
0
大数据学习脑图以及入门教程!

近些年,大数据的火热可谓是技术人都知道啊,很多人呢,也想学习大数据相关,所以,这里分享几个大数据脑图,希望可以让你清楚明白从哪里入门大数据,知道该学习以及掌握哪些知识点; 大数据...

董黎明
今天
1
0
聊聊redis的监控工具

序 本文主要研究一下redis的监控工具 redis-stat redis-stat是一个比较有名的redis指标可视化的监控工具,采用ruby开发,基于redis的info命令来统计,不影响redis性能。 docker运行 docker r...

go4it
今天
2
0
TypeScript基础入门之高级类型的索引类型(Index types)

转发 TypeScript基础入门之高级类型的索引类型(Index types) 高级类型 索引类型(Index types) 使用索引类型,编译器就能够检查使用了动态属性名的代码。 例如,一个常见的JavaScript模式是从...

durban
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部