快盘下载:好资源、好软件、快快下载吧!

快盘排行|快盘最新

当前位置:首页软件教程电脑软件教程 → MySQL8.0的几个新特性

MySQL8.0的几个新特性

时间:2022-09-20 07:16:02人气:作者:快盘下载我要评论

mysql8.0的几个新特性

今天翻看MySQL8.0的官方文档的时候,看到了MySQL8.0的几个新特性,简单测了下,跟MySQL5.7做了下对比,测试的结果如下:

1、数据字典使用事务性质的表来代替之前非事务性质的表,以MySQL8.0.19和MySQL5.7.16为例,我们可以看下这两个版本的数据字典mysql库里面的相关表的存储引擎。

MySQL5.7.16

+--------------------+---------------------------------------+--------+
| mysql              | columns_priv                          | MyISAM |
| mysql              | db                                    | MyISAM |
| mysql              | engine_cost                           | InnoDB |
| mysql              | event                                 | MyISAM |
| mysql              | func                                  | MyISAM |
| mysql              | general_log                           | CSV    |
| mysql              | gtid_executed                         | InnoDB |
| mysql              | help_category                         | InnoDB |
| mysql              | help_keyword                          | InnoDB |
| mysql              | help_relation                         | InnoDB |
| mysql              | help_topic                            | InnoDB |
| mysql              | innodb_index_stats                    | InnoDB |
| mysql              | innodb_table_stats                    | InnoDB |
| mysql              | ndb_binlog_index                      | MyISAM |
| mysql              | plugin                                | InnoDB |
| mysql              | proc                                  | MyISAM |
| mysql              | procs_priv                            | MyISAM |
| mysql              | proxies_priv                          | MyISAM |
| mysql              | server_cost                           | InnoDB |
| mysql              | servers                               | InnoDB |
| mysql              | slave_master_info                     | InnoDB |
| mysql              | slave_relay_log_info                  | InnoDB |
| mysql              | slave_worker_info                     | InnoDB |
| mysql              | slow_log                              | CSV    |
| mysql              | tables_priv                           | MyISAM |
| mysql              | time_zone                             | InnoDB |
| mysql              | time_zone_leap_second                 | InnoDB |
| mysql              | time_zone_name                        | InnoDB |
| mysql              | time_zone_transition                  | InnoDB |
| mysql              | time_zone_transition_type             | InnoDB |
| mysql              | user                                  | MyISAM |
+--------------------+---------------------------------------+--------+

MySQL8.0.19版本:

| mysql              | columns_priv                          | InnoDB |
| mysql              | component                             | InnoDB |
| mysql              | db                                    | InnoDB |
| mysql              | default_roles                         | InnoDB |
| mysql              | engine_cost                           | InnoDB |
| mysql              | func                                  | InnoDB |
| mysql              | general_log                           | CSV    |
| mysql              | global_grants                         | InnoDB |
| mysql              | gtid_executed                         | InnoDB |
| mysql              | help_category                         | InnoDB |
| mysql              | help_keyword                          | InnoDB |
| mysql              | help_relation                         | InnoDB |
| mysql              | help_topic                            | InnoDB |
| mysql              | innodb_index_stats                    | InnoDB |
| mysql              | innodb_table_stats                    | InnoDB |
| mysql              | password_history                      | InnoDB |
| mysql              | plugin                                | InnoDB |
| mysql              | procs_priv                            | InnoDB |
| mysql              | proxies_priv                          | InnoDB |
| mysql              | role_edges                            | InnoDB |
| mysql              | server_cost                           | InnoDB |
| mysql              | servers                               | InnoDB |
| mysql              | slave_master_info                     | InnoDB |
| mysql              | slave_relay_log_info                  | InnoDB |
| mysql              | slave_worker_info                     | InnoDB |
| mysql              | slow_log                              | CSV    |
| mysql              | tables_priv                           | InnoDB |
| mysql              | time_zone                             | InnoDB |
| mysql              | time_zone_leap_second                 | InnoDB |
| mysql              | time_zone_name                        | InnoDB |
| mysql              | time_zone_transition                  | InnoDB |
| mysql              | time_zone_transition_type             | InnoDB |
| mysql              | user                                  | InnoDB |
+--------------------+---------------------------------------+--------+

可以看到,MySQL8.0.19版本中,除了slow_log和general_log表使用了CVS的存储引擎,其他表都采用Innodb的存储引擎,而MySQL5.7.16版本中的字典表还有很多都采用了MyISAM存储引擎,因为innodb表是事务安全的,支持crash_safe故障自愈,而MyISAM表不支持事务,所以从元数据的安全性来讲,MySQL8.0.19版本的元数据安全性要更好。

2、MySQL8.0.19支持DDL语句的原子性操作,要么所有的语句都成功,要么都失败,继而回滚,而MySQL5.7.16版本可能出现DDL部分成功,部分失败的现象,这句话看着比较不容易理解,举例来说明,首先来看MySQL5.7.16版本:

mysql> use test;
Database changed
mysql> create table t1 (id int);
Query OK, 0 rows affected (0.07 sec)

mysql> create table t2 like t1;
Query OK, 0 rows affected (0.03 sec)

mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| t1             |
| t2             |
+----------------+
2 rows in set (0.00 sec)

mysql> drop table t1,t3;
ERROR 1051 (42S02): Unknown table 'test.t3'
mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| t2             |
+----------------+
1 row in set (0.00 sec)

上图中创建了两个表t1和t2,当我们使用一个语句对t1和t3进行drop的时候,在这种情况下,MySQL5.7.16会报错test.t3表不存在,但是当我们查看结果的时候,test.t1表已经被drop掉了。这种情况比较危险,一旦出现手误的场景,某些操作是不可逆的。

而对于MySQL8.0.19来讲,在同样的场景下,表现如下:

mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| t1             |
+----------------+
1 row in set (0.00 sec)

mysql> create table t2 like t1;
Query OK, 0 rows affected (0.12 sec)

mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| t1             |
| t2             |
+----------------+
2 rows in set (0.00 sec)

mysql> drop table t1,t3;
ERROR 1051 (42S02): Unknown table 'test.t3'
mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| t1             |
| t2             |
+----------------+
2 rows in set (0.01 sec)

可以看到,t3不存在的时候,t1并没有被drop掉,这符合我们的预期结果。

在这种情况下,MySQL8.0.19的表现好于MySQL5.7.16.

3、版本升级以前,在安装新版本的MySQL之后,MySQL服务器会在下次启动时自动升级数据字典表,此后,DBA应该手动调用mysql_upgrade来升级mysql模式中的系统表以及其中的对象。 其他架构,例如sys架构和用户架构。从MySQL 8.0.16开始,服务器执行以前由mysql_upgrade处理的任务。 在安装新的MySQL版本之后,服务器现在将在下次启动时自动执行所有必要的升级任务,而不依赖于DBA调用mysql_upgrade。

这部分内容还没有测试,后续我会补充一个在线升级MySQL8.0版本的案例,检验一下这个过程。

相关文章

  • 一步步带你设计MySQL索引数据结构

    一步步带你设计MySQL索引数据结构,想想我们生活中的例子,比如新华字典,我们有一个目录,目录根据拼音排序,内容包含了汉字位于字典中具体的的页码。聪明的你肯定也想到了,我们也可以借鉴这种思想,建立一个MySQL的目录,叫做“索引”。...
  • Server SAN_Windows存储卷设备

    Server SAN_Windows存储卷设备,目前,实现云环境中数据的高效存储是云计算提供服务的基本要求。云计算和云存储已经成为提供信息和在线功能的首选方法。...

网友评论

快盘下载暂未开通留言功能。

关于我们| 广告联络| 联系我们| 网站帮助| 免责声明| 软件发布

Copyright 2019-2029 【快快下载吧】 版权所有 快快下载吧 | 豫ICP备10006759号公安备案:41010502004165

声明: 快快下载吧上的所有软件和资料来源于互联网,仅供学习和研究使用,请测试后自行销毁,如有侵犯你版权的,请来信指出,本站将立即改正。