MySQL5.7版本新特性(一)

NicoNicoNi • 2017 年 08 月 31 日

第一章 MySQL服务功能增强

一、数据库初始化方式变更

MySQL5.7之前scripts/mysql_install_db\

--datadir = /data/sql_data \

--user = mysql --basedir = /home/mysql

MySQL5.7之后bin/mysqld --initialize --user = mysql \

--basedir = /home/mysql \

--datadir = /home/mysql /data

将MySQL初始化以后,它会提供给我们一个root密码,在之前版本中,root密码都是空的,这是MySQL5.7之后的特性。如果此时你执行show databases命令,会产生错误代码为1820的错误,它要求你更改root密码以后再使用。

二、支持为表增加计算列

计算列:当一张表中的某一个列是由这张表中的其他列计算而来,这样的列就称之为计算列。

我们举一个例子来说,首先我们要建一张表表t,表中含有3个整型列c1,c2和c3,c3要求等于c1和c2的和,这时候c3这一列就称之为计算列。

在MySQL5.7之前,要实现这样的一个表结构的话,通常是需要使用触发器的方式来实现的。

1.先创建一张表表t 。

mysql5.6发布时间 mysql 5.7发布_触发器

2.创建一个插入触发器。

mysql5.6发布时间 mysql 5.7发布_触发器

3.将c1列和c2列插入数据1和2,c3列被自动计算出来为3。

mysql5.6发布时间 mysql 5.7发布_触发器

4.但光有插入触发器是不行的,如果我们对c1和c2的值进行了更新,那么c3的值就不能等于c1加c2了。因此我们还必须再建立一个更新触发器。

mysql5.6发布时间 mysql 5.7发布_触发器

5.这时候我们用show triggers来查看一下,这时候就有了两个触发器,一个是插入触发器,一个是更新触发器。

mysql5.6发布时间 mysql 5.7发布_触发器

6.这时候我们对表t中的c1更新为5,可以看到c3被自动更新为了7。

mysql5.6发布时间 mysql 5.7发布_触发器

mysql5.6发布时间 mysql 5.7发布_触发器

如果我们使用视图也是可以实现同样的效果的,但是无论是使用视图还是触发器,都会对我们的查询产生或多或少的影响,所以在一般的生产环境中是很少建议使用视图和触发器的。

mysql5.6发布时间 mysql 5.7发布_触发器

mysql5.6发布时间 mysql 5.7发布_触发器

在MySQL5.7之后,它给我们提供了计算列的方式,这样效率就会提高很多。

1.同样,我们先创建一张表表t,并查看一下表结构。

mysql5.6发布时间 mysql 5.7发布_触发器

mysql5.6发布时间 mysql 5.7发布_触发器

2.对表t中的c1列和c2列进行数据插入,c3列同样被自动计算出来。

mysql5.6发布时间 mysql 5.7发布_触发器

3.这时候我们将表t中的c1列更新为5,c3列也被自动更新为了7,达到了相同的效果而且没有任何的触发器。

mysql5.6发布时间 mysql 5.7发布_触发器

mysql5.6发布时间 mysql 5.7发布_触发器

mysql5.6发布时间 mysql 5.7发布_触发器

另外,计算列实际上是有两种的,一种是VIRTUAL,一种是STORED,VIRTUAL是没有被分到磁盘上的,STORED会被存储在磁盘空间中。

三、引入JSON列类型及相关函数

在MySQL5.7之前,只能在varchar或是text等字符类型的列中存储json类型的字符串,并通过程序解析使用json字符串。

在MySQL5.7之后,增加了json列类型以及json_开头的相关处理函数,它并不是以字符串的形式进行存储,而是以一个新的内部数据类型来进行存储的,优化了json列的存储格式。而且它还会自动验证json串是否是符合标准的,如果不符合,它会提供一个报错的信息给我们。如json_type(),json_object(),json_merge()等。

在MySQL中,json类型是分为json数组和json对象的。

mysql5.6发布时间 mysql 5.7发布_触发器

mysql5.6发布时间 mysql 5.7发布_触发器

1.我们先建一个json类型的表。

mysql5.6发布时间 mysql 5.7发布_触发器

mysql5.6发布时间 mysql 5.7发布_触发器

2.向表中插入一个json数组。

mysql5.6发布时间 mysql 5.7发布_触发器