`
zhangfeilo
  • 浏览: 401085 次
  • 性别: Icon_minigender_1
  • 来自: 昆明
社区版块
存档分类
最新评论

MySQL 5.7 使用原生JSON类型的例子

 
阅读更多

首先回顾一下JSON的语法规则:

数据在键值对中,
数据由逗号分隔,
花括号保存对象,
方括号保存数组。

按照最简单的形式,可以用下面的JSON表示:

{"NAME": "Brett", "email": "brett@xxx.com"}

如何在MySQL中使用JSON类型:

新建user表,设置lastlogininfo列为JSON类型。

mysql> CREATE TABLE user(id INT PRIMARY KEY, name VARCHAR(20) , lastlogininfo JSON);
Query OK, 0 rows affected (0.27 sec)

向user表插入普通数据与json数据。mysql会对插入的数据进行JSON格式检查,确保其符合JSON格式,若插的是不合法的数据,会出现Invalid JSON text错误。

mysql> INSERT INTO user VALUES(1 ,"lucy",'{"time":"2015-01-01 13:00:00","ip":"
192.168.1.1","result":"fail"}');
Query OK, 1 row affected (0.05 sec)

mysql> INSERT INTO user VALUES(2 ,"bobo",'{"time":"2015-10-07 06:44:00","ip":"
192.168.1.0","result":"success"}');
Query OK, 1 row affected (0.04 sec)

也可以使用JSON_OBJECT()函数:

mysql> INSERT INTO user VALUES(1 ,"lucy",JSON_OBJECT("time",NOW(),"ip","
192.168.1.1","result","fail"));
Query OK, 1 row affected (0.00 sec)

查询name为'lucy'的最后登陆信息。

mysql> SELECT lastlogininfo FROM user WHERE name = 'lucy';
+------------------------------------------------------------------------+
| lastlogininfo  |
+------------------------------------------------------------------------+
| {"ip": "192.168.1.1", "time": "2015-01-01 13:00:00", "result": "fail"} |
+------------------------------------------------------------------------+
1 row in set (0.00 sec)

查询最后登陆时间在2015-10-02后的用户。JSON数据使用->操作符,其表达式为:该json列->'$.键'与JSON_EXTRACT(json列 , '$.键')等效使用。如果传入的不是一个有效的键,则返回Empty set。该表达式可以用于SELECT查询列表 ,WHERE/HAVING , ORDER/GROUP BY中,但它不能用于设置值。

表达式 : json列->'$.键'

mysql>  SELECT * FROM user WHERE lastlogininfo ->'$.time' > '2015-10-02';
+-----------------------------------------------------------------------+
| id | name | lastlogininfo|
+-----------------------------------------------------------------------+
|  2 | bobo | {"ip": "192.168.1.0", "time": "2015-10-07 06:44:00", "result": "success"} |
+-----------------------------------------------------------------------+
1 row in set (0.00 sec)

等价于 :JSON_EXTRACT(json列 , '$.键')

mysql>  SELECT * FROM user WHERE JSON_EXTRACT(lastlogininfo,'$.time') > '2015-10-02';
+-----------------------------------------------------------------------+
| id | name | lastlogininfo|
+-----------------------------------------------------------------------+
|  2 | bobo | {"ip": "192.168.1.0", "time": "2015-10-07 06:44:00", "result": "success"} |
+-----------------------------------------------------------------------+
1 row in set (0.00 sec)

比较JSON值采用两个级别。第一级是基于JSON类型的比较。如果类型不同,则取决于哪种类型具有更高的优先级。如果是相同的JSON类型,则是第二级,使用该类型的规则来比较。

下面的列表显示了JSON类型的比较规则,从最高优先级到最低优先级。显示在一行的类型则是具有相同的优先级。

BLOB
BIT
OPAQUE
DATETIME
TIME
DATE
BOOLEAN
ARRAY
OBJECT
STRING
INTEGER, DOUBLE
NULL

使用JSON_TYPE()函数返回指定属性对应的类型名称:

mysql> SELECT JSON_TYPE(lastlogininfo->'$.ip') FROM user;
+----------------------------------+
| JSON_TYPE(lastlogininfo->'$.ip') |
+----------------------------------+
| STRING   |
| STRING   |
+----------------------------------+
2 rows in set (0.00 sec)

值得一提的是,可以通过虚拟列对JSON类型的指定属性进行快速查询。

创建虚拟列:

mysql> ALTER TABLE user ADD lastloginresult VARCHAR(15)
    -> GENERATED ALWAYS AS (lastlogininfo->'$.result') VIRTUAL;
Query OK, 0 rows affected (0.08 sec)
Records: 0  Duplicates: 0  Warnings: 0

使用时和普通类型的列查询是一样的:

mysql> SELECT lastloginresult FROM user WHERE name='lucy';
+-----------------+
| lastloginresult |
+-----------------+
| "fail"  |
+-----------------+
1 row in set (0.00 sec)

这只是一个简单的JSON类型例子,Mysql还提供了许多对JSON类型处理的函数,可以从MySQL的官方网站查看帮助文档:
http://dev.mysql.com/doc/refman/5.7/en/json.html



文/小码哥Java学院(简书作者)
原文链接:http://www.jianshu.com/p/455d3d4922e1
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。
分享到:
评论

相关推荐

    小码哥MySQL5.7使用原生JSON类型的例子共3页.p

    在“小码哥MySQL5.7使用原生JSON类型的例子共3页.pdf.zip”这个压缩包中,可能包含了多个示例,展示了如何在实际应用中充分利用这一特性。 1. JSON数据类型: MySQL 5.7中的JSON类型可以存储任何有效的JSON格式的...

    简单谈谈MySQL5.7 JSON格式检索

    需要注意的是,尽管MySQL 5.7支持JSON类型,但这并不等同于使用传统的数据类型,如整数、字符串或日期等。因为JSON是一种非结构化数据格式,所以存储在JSON列中的数据可以包含嵌套结构和不同类型的数据。 为了在...

    mysql 5.7 官方文档

    比如,这个版本提高了复制功能,增强了崩溃恢复能力,引入了对JSON数据类型的原生支持,并且对InnoDB存储引擎进行了优化,其中包括自适应哈希索引和改进的全文搜索功能。 文档还提及了MySQL的使用源,包括MySQL官方...

    mysql5.7.32最新稳定版本

    - **JSON 支持**:引入了对 JSON 数据类型的原生支持,使得非结构化数据的存储和查询变得更加方便。 - **安全增强**:提供了更多安全特性,如更强大的认证机制、审计日志和加密选项。 - **SQL 功能扩展**:包括...

    mysql5.7-jdbc.rar

    2. **JSON支持**:MySQL 5.7引入了原生的JSON数据类型,允许存储和查询JSON格式的数据。这极大地增强了MySQL在处理NoSQL风格的数据时的能力。 3. **InnoDB增强**:InnoDB存储引擎在5.7版本中得到了显著加强,包括更...

    MySQLServer 5.7(解压版)

    4. **JSON支持**:MySQL 5.7开始原生支持JSON数据类型,允许存储和检索JSON文档,为NoSQL风格的数据操作提供了便利。此外,还提供了丰富的JSON函数,如JSON_EXTRACT、JSON_INSERT等,用于处理JSON字段。 5. **柱状...

    MySql5.7.zip

    - **JSON支持**:新增了对JSON数据类型的原生支持,允许在SQL查询中直接操作JSON文档。 - **窗口函数**:提供了窗口函数,使得在聚合操作中可以实现更复杂的计算,如行号、排名、累计和等。 - **GTID(全局事务...

    mysql 5.7.zip

    3. JSON支持:MySQL 5.7引入了对JSON数据类型的原生支持,允许用户在关系数据库中存储和操作非结构化数据,增强了数据库的灵活性。 4. 存储过程和触发器优化:在5.7版本中,存储过程和触发器的性能得到提升,且提供...

    MySQL5.7从入门到精通》

    15. **JSON支持**:MySQL5.7引入了对JSON数据类型的原生支持,如何存储和查询JSON格式的数据。 16. **高性能和高可用性**:包括内存管理、性能日志、性能监控和调优工具的使用,以及高可用性的解决方案。 通过...

    mysql-5.7版本源码包

    5. **JSON支持**:MySQL 5.7引入了对JSON数据类型的原生支持,允许存储和检索JSON文档,增强了NoSQL和SQL的结合能力。 6. **GROUP BY优化**:在5.7中,GROUP BY语句的处理得到了显著优化,可以更快地处理大量数据的...

    mysql5.7.33社区版.zip

    - **JSON 数据类型**:MySQL 5.7 引入了原生 JSON 数据类型,允许存储和查询 JSON 文档,支持 JSON 检索和操作,增强了与 NoSQL 数据库的交互能力。 - ** Spatial 数据类型**:地理空间数据类型的增强,支持更多...

    最新mysql5.7安装包(Windows系统)

    4. **JSON支持**:MySQL 5.7开始支持原生的JSON数据类型,允许存储和查询JSON格式的数据,无需进行额外的序列化和反序列化操作。这为NoSQL与SQL之间的集成提供了便利。 5. **查询优化器改进**:查询优化器在5.7版本...

    mysql一个插件json

    MySQL 5.7开始引入了对JSON数据类型的原生支持,包括一系列用于查询、索引和操作JSON字段的内置函数。然而,如果用户有更高级或特定的需求,例如自定义的JSON处理函数,那么这个插件可能提供了一种解决方案。 描述...

    MySQL5.7 yum源安装文件v5.7.zip

    在这个“MySQL5.7 yum源安装文件v5.7.zip”压缩包中,包含了两个关键文件,即`mysql-community.repo`和`mysql-community-release-el7-5.noarch.rpm`,它们是专门为使用YUM包管理器在Linux系统(如CentOS或RHEL 7)上...

    mysql5.7官方手册

    1. **JSON 支持**:增加了对JSON数据类型的原生支持,允许用户更高效地存储和查询JSON格式的数据。 2. **窗口函数**:新增了窗口函数,用于执行复杂的分组和排序操作,提高了SQL查询的灵活性和效率。 3. **加密表...

    MySQL5.7极简安装版

    MySQL5.7极简安装版是针对Windows操作系统设计的一个轻量级MySQL服务器版本,它包含了必要的组件和服务,便于用户快速部署和使用。这个版本适用于学习、开发或小型项目,简化了传统的安装流程,使得初学者和开发者...

    mysql-5.7.33-winx64.rar

    4. **JSON支持**:5.7版本引入了原生JSON数据类型,允许直接存储和查询JSON格式的数据,无需进行序列化或反序列化。此外,还提供了丰富的JSON函数,如`JSON_EXTRACT`和`JSON_INSERT`,便于操作JSON文档。 5. **柱状...

    MySql5.7类.rar

    5. **JSON支持**: 5.7版本引入了对JSON数据类型的原生支持,使得非结构化数据的存储和查询变得更加方便。 6. **安全增强**: 包括改进的密码验证插件、默认的更安全的配置以及更好的审计日志功能,提升了系统的安全...

    mysql5.7.31_windows_64.zip

    4. **JSON 数据类型**:MySQL 5.7 添加了原生 JSON 数据类型,允许存储和操作 JSON 文档,这对于NoSQL风格的应用程序非常有用。 5. **安全增强**:加强了认证插件,如使用 caching_sha2_password 替代传统的 mysql_...

Global site tag (gtag.js) - Google Analytics