首先回顾一下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
原文链接:http://www.jianshu.com/p/455d3d4922e1
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。
相关推荐
小码哥MySQL5.7使用原生JSON类型的例子共3页.pdf.zip
mysql5.7支持json数据的增删改查的例子
mysql5.7镜像;mysql5.7镜像;mysql5.7镜像;mysql5.7镜像
mysql5.7以上具有json数据类型了,文档是学习使用JSON文档。
mysql5.7查阅文档mysql5.7查阅文档mysql5.7查阅文档mysql5.7查阅文档mysql5.7查阅文档mysql5.7查阅文档mysql5.7查阅文档mysql5.7查阅文档mysql5.7查阅文档mysql5.7查阅文档mysql5.7查阅文档mysql5.7查阅文档mysql5.7...
mysql5.7安装教程+mysql5.7镜像安装+mysql学习+mysql5.7镜像包 mysql5.7安装教程+mysql5.7镜像安装+mysql学习+mysql5.7镜像包 mysql5.7安装教程+mysql5.7镜像安装+mysql学习+mysql5.7镜像包 mysql5.7安装教程+mysql...
mysql 5.7 docker 镜像 离线安装包 mysql 5.7 docker 镜像 离线安装包 mysql 5.7 docker 镜像 离线安装包 mysql 5.7 docker 镜像 离线安装包 mysql 5.7 docker 镜像 离线安装包 mysql 5.7 docker 镜像 离线安装包
MySQL 5.7 中文文档 MySQL 5.7 中文文档 MySQL 5.7 中文文档
主要介绍了mysql5.7 新增的json字段类型用法,结合实例形式分析了mysql5.7 新增的json字段类型具体功能、使用方法及操作注意事项,需要的朋友可以参考下
mysql驱动jar 文件适用MySQL5.7,本人亲测可用适用ieda成功连接到数据库(mysql-connector-java-5.1.25.jar)
Java连接Mysql的工具,适用于Mysql5.7版本,包含如何使用。
MySQL 5.7 版本驱动包,可配合博主 【MySQL】JDBC编程该篇文章来使用
mysql5.7安装.doc mysql5.7安装.doc mysql5.7安装.doc mysql5.7安装.doc mysql5.7安装.doc mysql5.7安装.doc mysql5.7安装.doc mysql5.7安装.doc mysql5.7安装.doc mysql5.7安装.doc mysql5.7安装.doc mysql5.7安装....
MySQL 5.7 英文官方参考手册
日志安全审计插件,原官网已经无法下载 mysql 5.7社区版安全审计插件audit-plugin-mysql-5.7-1.1.7-921-linux-x86_64.zip mysql 5.7社区版安全审计插件audit-plugin-mysql-5.7-1.1.7-921-linux-x86_64.zip mysql 5.7...
mysql navicat premium,最新版本,支持mysql5.7 json格式数据,解压即可直接使用
mysql驱动(适用于mysql5.7版本)!!!!!!亲测可用。里面有两个版本的,都可以用
这是Mysql™参考手册。它记录了MySQL 5.7到5.7.26,以及基于版本7.5的NDB集群版本。NDB分别通过5.7.25-NDB-7.5.13。它可能包括尚未发布的MySQL版本特性的文档。有关已发布的版本的信息,请参阅MySQL 5.7发行说明.
Linux系统版本:银河麒麟v10 arm MySQL5.7 aarch64 免编译