首先回顾一下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”这个压缩包中,可能包含了多个示例,展示了如何在实际应用中充分利用这一特性。 1. JSON数据类型: MySQL 5.7中的JSON类型可以存储任何有效的JSON格式的...
需要注意的是,尽管MySQL 5.7支持JSON类型,但这并不等同于使用传统的数据类型,如整数、字符串或日期等。因为JSON是一种非结构化数据格式,所以存储在JSON列中的数据可以包含嵌套结构和不同类型的数据。 为了在...
比如,这个版本提高了复制功能,增强了崩溃恢复能力,引入了对JSON数据类型的原生支持,并且对InnoDB存储引擎进行了优化,其中包括自适应哈希索引和改进的全文搜索功能。 文档还提及了MySQL的使用源,包括MySQL官方...
- **JSON 支持**:引入了对 JSON 数据类型的原生支持,使得非结构化数据的存储和查询变得更加方便。 - **安全增强**:提供了更多安全特性,如更强大的认证机制、审计日志和加密选项。 - **SQL 功能扩展**:包括...
2. **JSON支持**:MySQL 5.7引入了原生的JSON数据类型,允许存储和查询JSON格式的数据。这极大地增强了MySQL在处理NoSQL风格的数据时的能力。 3. **InnoDB增强**:InnoDB存储引擎在5.7版本中得到了显著加强,包括更...
4. **JSON支持**:MySQL 5.7开始原生支持JSON数据类型,允许存储和检索JSON文档,为NoSQL风格的数据操作提供了便利。此外,还提供了丰富的JSON函数,如JSON_EXTRACT、JSON_INSERT等,用于处理JSON字段。 5. **柱状...
- **JSON支持**:新增了对JSON数据类型的原生支持,允许在SQL查询中直接操作JSON文档。 - **窗口函数**:提供了窗口函数,使得在聚合操作中可以实现更复杂的计算,如行号、排名、累计和等。 - **GTID(全局事务...
3. JSON支持:MySQL 5.7引入了对JSON数据类型的原生支持,允许用户在关系数据库中存储和操作非结构化数据,增强了数据库的灵活性。 4. 存储过程和触发器优化:在5.7版本中,存储过程和触发器的性能得到提升,且提供...
15. **JSON支持**:MySQL5.7引入了对JSON数据类型的原生支持,如何存储和查询JSON格式的数据。 16. **高性能和高可用性**:包括内存管理、性能日志、性能监控和调优工具的使用,以及高可用性的解决方案。 通过...
5. **JSON支持**:MySQL 5.7引入了对JSON数据类型的原生支持,允许存储和检索JSON文档,增强了NoSQL和SQL的结合能力。 6. **GROUP BY优化**:在5.7中,GROUP BY语句的处理得到了显著优化,可以更快地处理大量数据的...
- **JSON 数据类型**:MySQL 5.7 引入了原生 JSON 数据类型,允许存储和查询 JSON 文档,支持 JSON 检索和操作,增强了与 NoSQL 数据库的交互能力。 - ** Spatial 数据类型**:地理空间数据类型的增强,支持更多...
4. **JSON支持**:MySQL 5.7开始支持原生的JSON数据类型,允许存储和查询JSON格式的数据,无需进行额外的序列化和反序列化操作。这为NoSQL与SQL之间的集成提供了便利。 5. **查询优化器改进**:查询优化器在5.7版本...
MySQL 5.7开始引入了对JSON数据类型的原生支持,包括一系列用于查询、索引和操作JSON字段的内置函数。然而,如果用户有更高级或特定的需求,例如自定义的JSON处理函数,那么这个插件可能提供了一种解决方案。 描述...
在这个“MySQL5.7 yum源安装文件v5.7.zip”压缩包中,包含了两个关键文件,即`mysql-community.repo`和`mysql-community-release-el7-5.noarch.rpm`,它们是专门为使用YUM包管理器在Linux系统(如CentOS或RHEL 7)上...
1. **JSON 支持**:增加了对JSON数据类型的原生支持,允许用户更高效地存储和查询JSON格式的数据。 2. **窗口函数**:新增了窗口函数,用于执行复杂的分组和排序操作,提高了SQL查询的灵活性和效率。 3. **加密表...
MySQL5.7极简安装版是针对Windows操作系统设计的一个轻量级MySQL服务器版本,它包含了必要的组件和服务,便于用户快速部署和使用。这个版本适用于学习、开发或小型项目,简化了传统的安装流程,使得初学者和开发者...
4. **JSON支持**:5.7版本引入了原生JSON数据类型,允许直接存储和查询JSON格式的数据,无需进行序列化或反序列化。此外,还提供了丰富的JSON函数,如`JSON_EXTRACT`和`JSON_INSERT`,便于操作JSON文档。 5. **柱状...
5. **JSON支持**: 5.7版本引入了对JSON数据类型的原生支持,使得非结构化数据的存储和查询变得更加方便。 6. **安全增强**: 包括改进的密码验证插件、默认的更安全的配置以及更好的审计日志功能,提升了系统的安全...
4. **JSON 数据类型**:MySQL 5.7 添加了原生 JSON 数据类型,允许存储和操作 JSON 文档,这对于NoSQL风格的应用程序非常有用。 5. **安全增强**:加强了认证插件,如使用 caching_sha2_password 替代传统的 mysql_...