dong

MySQL5.7版本新特性(一)
第一章 MySQL服务功能增强一、数据库初始化方式变更MySQL5.7之前scripts/mysql_instal...
扫描右侧二维码阅读全文
31
2017/08

MySQL5.7版本新特性(一)

第一章 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 。
1.png

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

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

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

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

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

7.png

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

8.png

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

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

10.png

11.png

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

12.png

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

13.png

14.png

15.png

另外,计算列实际上是有两种的,一种是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对象的。

16.png

17.png

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

18.png

19.png

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

20.png

Last modification:May 24th, 2019 at 10:08 am
If you think my article is useful to you, please feel free to appreciate

Leave a Comment