关于mysql5.7版本新特性介绍 ------数据类型 JSON
测试环境:
Win10、mysql 5.7.14
内容简介:
随着mysql5.7版本的到来,大家对其的热情也越来越高涨,身为mysql圈子里的一员,我本身也对mysql5.7的一些新特性有所了解,通过学习了解到了很多新的特性,今天给大家介绍一下它在灵活性方面的一个新的功能:提供对JSON的支持
JSON介绍
首先介绍一下什么是JSON:
> JSON(JavaScript Object Notation, JS 对象标记) 是一种轻> 量级的数据交换格式。它基于 ECMAScript (w3c制定的js规范)的一> 个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简> 洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人> 阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。>
通俗的讲就是,JSON数据类型 可以存储一些复杂的数据类型,例如字符串、数字、对象、数组等。将一些平时比较复杂的数据存储,简单化,便于人们存储与阅读。
JSON存储方式:
对于普通数据类型来说:
> ["abc", 10, null, true, false]
对于时间类型的存储
> ["12:18:29.000000", "2015-07-29", "2015-07-29 12:18:29.000000"]
对于对象来说:一般使用键值对的方式存储
一般JSON的存储对象的格式是这样的:
{"firstName": "John"}
这很容易理解,等价于这条 JavaScript 语句:
{firstName : "John"}
Mysql支持JSON的原因:
随着非结构化数据存储需求的持续增长,各种非结构化数据存储的数据库应运而生(如MongoDB)。从最新的数据库使用 排行榜 来看,MongoDB已经超过了PostgreSQL,其火热程度可见一斑。
各大关系型数据库也不甘示弱,纷纷提供对JSON的支持,以应对非结构化数据库的挑战。MySQL数据库从5.7.8版本开始,也提供了对JSON的支持。
MySQL对支持JSON的做法是,在server层提供了一堆便于操作JSON的函数,至于存储,就是简单地将JSON编码成BLOB,然后交由存储引擎层进行处理,也就是说,MySQL 5.7的JSON支持与存储引擎没有关系,MyISAM 存储引擎也支持JSON 格式。
MySQL支持JSON以后,总是避免不了拿来与MongoDB进行一些比较。但是,MySQL对JSON的支持,至少有两点能够完胜MongoDB:
1.可以混合存储结构化数据和非结构化数据,同时拥有关系型数据库和非关系型数据库的优点
2.能够提供完整的事务支持
下面我在mysql中做一下对于JOSN的一些测验,来实验一下它的功能。
1.首先我创建了一个用JSON存储的表
2.插入数据
3.对json中数据进行测验检验功能:
(1)先插入一条数据 做一下 group by的 实验
(2)插入一条部分内容为空的数据,看一下JSON的兼容性问题
(3)建立索引
然后在确定一下是否走了索引
确定了一下确实走了索引,
4.对于支持失事物的检验:
我想这就是为什么mysql支持JSON后的优势所在,它可以支持事物!
(1) 开启事物查看一下原表
(2)插入一行数据
Rollback一下
经过以上的各个检验与验证,测试了一些关于JSON的功能,个人觉得它支持的功能很强大,非常值得使用。
由此可见对于mysql来说,用JSON的方式存储数据类似于‘表中表’,当业务数据变化非常快时,可以利用JSON来存储,以此来提高数据库的灵活性,当业务稳定下来时,通过之前写入的tirgger , 每个json都运算json_extract(data,'$.name') ,然后写到一个新的不可修改的列里。因此MySQL添加的JSON数据类型让关系数据库用起来更简单,并且模糊了SQL和NoSQL数据库的界限。
缺点
JSON同样也存在很多缺点:
JSON是一种非正式储存数据的好方式。但是关系数据库在标准化数据上很有强大,所有的数据都被标准化到小组成部分中来提高访问速度。并且,有的数据可能缺乏应用的严格性,比如当记录一个电子邮件地址的时候,key值可能是email,eMail,e-mail,或者其他变体。