Mysql8.0和Mysql5.0的区别与相互转化

MySQL8.0在性能、NoSQL支持、窗口函数、编码、隐藏索引和角色管理等方面有显著提升。性能提升可达2倍,NoSQL文档支持增强,UTF-8成为默认编码,新增窗口函数提高分析效率。此外,还引入了隐藏索引用于调试,持久化设置改善配置管理,事务性数据字典优化了系统表结构。移除了查询缓存,增加了角色功能以简化权限管理。转化过程涉及驱动包更新和数据库配置调整。

目录

一、两者区别

1.性能提升级

2.更强的NoSQL文档支持

3.窗口函数

4.UTF-8编码

5.隐藏索引

6.持久化设置

7.重构BLOB

8.事务性数据字典

9.SQL角色

10.除去查询缓存

二、两者转化

1.驱动包下载

2.数据库配置

三、数据库测试类

四、参考资料

五、版权备注

六、支持博主


一、两者区别

1.性能提升级

官方表示MySQL 8.0 的速度要比 MySQL 5.7 快 2 倍。MySQL 8.0 在读/写工作负载、IO 密集型工作负载、以及高竞争工作负载时相比MySQL5.7有更好的性能。

2.更强的NoSQL文档支持

MySQL 从 5.7 版本开始提供 NoSQL 存储功能,目前在 8.0 版本中这部分功能也得到了更大的改进。该项功能消除了对独立的 NoSQL 文档数据库的需求,而 MySQL 文档存储也为 schema-less 模式的 JSON 文档提供了多文档事务支持和完整的ACID合规性。
 

3.窗口函数

也就是在满足某种条件的记录集合上执行的特殊函数。它可以用来实现若干新的查询方式。窗口函数与 SUM()、COUNT() 这种集合函数类似,但它不会将多行查询结果合并为一行,而 是将结果放回多行当中。即窗口函数不需要GROUP BY。窗口函数的使用,将大大提高相关的分析型场景的效率。

4.UTF-8编码

从MySQL8.0开始,使用utf8mb4作来MySQL的默认字符集,并支持Unicode 9,默认字符集将从 latin1改为utf8mb4,默认定序collation将从latin1_swedish_ci改为utf8mb4_800_ci_ai;

5.隐藏索引

可以将索引通过命令设置为隐藏或显示。对于被隐藏的索引,它不会被查询优化器所使用,我们可以使用这一功能,对相关的查询进行性能调试,通过隐藏或显示,分析数据库性能差异的原因,同时也可以去除无效的索引。这个跟Oracle里面设置索引失效时一样的。

6.持久化设置

MySQL8.0新增SET PERSIST的命令,该命令的配置值保存到数据目录下的mysqld-auto.cnf文件中,待重启后,读取该文件,用其中的配置覆盖缺省的配置文件,补充了SET GLOBAL命令只能临时生效的不足;

7.重构BLOB

重构BLOB加速了片段读取/更新操作,可以加速JSON数据的操作。大幅改进了对JSON的支持,添加了基于路径查询参数从JSON字段中抽取数据的JSON_EXTRACT()函数,以及用于将数据分别组合到JSON数组和对象中的JSON_ARRAYAGG()和JSON_OBJECTAGG()聚合函数。

8.事务性数据字典

完全脱离了MyISAM存储引擎,真正将数据字典放到InnoDB中的一些表中,不再需要 FRM、TRG、PAR 等文件;Information Schema现在以数据字典表的一个视图出现。也就是原则上可以不需要MyISAM数据表类型,系统表都可以放到InnoDB之中。

9.SQL角色

可以创建角色,给用户设置或去除角色,大大方便权限的管理。

详见:MySQL 8.0的用户和角色管理

10.除去查询缓存

首先,查询缓存的效果取决于缓存的命中率,只有命中缓存的查询效果才能有改善,因此无法预测其性能。其次,查询缓存的另一个大问题是它受到单个互斥锁的保护。在具有多个内核的服务器上,大量查询会导致大量的互斥锁争用。

详见:知识点 | 为何从8.0开始取消了MySQL查询缓存Query Cache?

二、两者转化

1.驱动包下载

Mysql5.0驱动包
链接:https://pan.baidu.com/s/1jyiRME-d2cHPyUilYH6MYA
提取码:jzru
Mysql8.0驱动包
链接:https://pan.baidu.com/s/1NkjhYej3drzahGsS4L7GTQ 
提取码:qug5

2.数据库配置

1.Mysql5.0的DRIVER是没有cj的,Mysql8.0是有cj的。

2.Mysql5.0的URL问号后面是useSSL=false&useUnicode=true&characterEncoding=utf-8,Mysql8.0问号后面是serverTimezone=UTC。

3.账号密码设置成你自己的账号密码。这里要注意一下,有很多同学用数据库的账号密码来登录系统,这是不对的。系统的账号密码在数据库的表里面。

Mysql5.0配置

//以下是mysql5.0版本的配置

// 数据库地址
private String DRIVER = "com.mysql.jdbc.Driver";
// 数据库地址
private String URL = "jdbc:mysql://localhost:3306/swing_warehouse?useSSL=false&useUnicode=true&characterEncoding=utf-8";
// 数据库用户名
private String USER = "root";
// 数据库密码
private String PASS = "";

//以上是mysql5.0版本的配置

Mysql8.0配置

//以下是mysql8.0版本的配置

// 数据库地址
private String DRIVER = "com.mysql.cj.jdbc.Driver";
// 数据库地址
private String URL = "jdbc:mysql://localhost:3306/swing_warehouse?serverTimezone=UTC";
// 数据库用户名
private String USER = "root";
// 数据库密码
private String PASS = "admin";

三、数据库测试类

有很多同学的代码没有问题,可能自己的数据库配置写错了。这时候你怎么办呢?你需要在你的代码里面新建数据库测试类,用来测试你的数据库配置。

package com.sjsq;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

public class JDBCTEST {

    // 数据库地址
    public static String DRIVER = "com.mysql.cj.jdbc.Driver";
    // 数据库地址
    public static String URL = "jdbc:mysql://localhost:3306/world?serverTimezone=UTC";
    // 数据库用户名
    public static String USER = "root";
    // 数据库密码
    public static String PASS = "admin";


    // 主函数
    public static void main(String[] args) {

        try {
            Class.forName(DRIVER);
            Connection con = DriverManager.getConnection(URL, USER, PASS);
            Statement stet = con.createStatement();
            //我的数据库Person中的表student,改成你自己的表
            String sql = "select count(*) from city;";
            ResultSet rs = stet.executeQuery(sql);
            int count = 0;

            while (rs.next()) {
                count = rs.getInt(1);

            }
            System.out.print("您的city表的条数为:");
            System.out.println(count);
            con.close();
        } catch (
                Exception e) {
            e.printStackTrace();
        }
    }
}

四、参考资料

优快云博主:猿图笔记的博客_优快云博客-mysql,IT,shell领域博主

文章来源:MySQL8.0 和 MySQL5的区别_猿图笔记的博客-优快云博客

五、版权备注

如有侵权请联系我删除!

六、支持博主

如果您觉得这篇文章对您有用,博客关注加点赞

如果您想看一些视频,那么你可以搜索B站:水坚石青

祝您身心健康,阖家辛福,万事如意!

08-05
### MySQL 8.0 进阶书籍推荐 MySQL 8.0 是近年来 MySQL 发展中的重要版本,引入了诸多新特性优化,例如文档存储、JSON 增强、角色管理、窗口函数、原子 DDL、InnoDB 增强功能等。对于已经具备一定 MySQL 基础、希望深入掌握 MySQL 8.0 的开发者 DBA 来说,以下书籍是值得推荐的进阶资源。 #### 《MySQL 8.0 原理实战一网打尽》 本书以 MySQL 8.0 为主,全面系统地阐述了 MySQL 日常使用及管理过程中的一些常用知识点:包括安装、复制、binlog、备份、监控、DDL、线程池、中间件、常用工具、组复制、InnoDB Cluster、JSON 以及 MySQL 8.0 的新特性[^2]。该书由甲骨文数据库专家撰写,结合多年实战经验,深入剖析 MySQL 8.0 的核心机制部署实践,适合用于系统性进阶学习。 #### 《MySQL推荐书单:从入门到精通》 该书不仅涵盖了 MySQL 基础内容,还介绍了 MySQL 8.0 的新特性,如文档存储、MySQL Shell 及 MySQL Router 等[^1]。附录部分详细说明了企业版监控、企业版备份等官方工具,以及克隆插件 VirtualBox 虚拟机环境的搭建,帮助读者全面了解 MySQL 8.0 的生态体系部署方式。 #### 《高性能 MySQL(第4版)》 虽然该书尚未完全覆盖 MySQL 8.0 的所有细节,但其对性能优化、高可用架构、复制机制、事务控制等内容的深入讲解,仍然是 MySQL 8.0 学习者不可或缺的参考书籍。书中结合了大量企业级应用案例,适合希望在生产环境中提升 MySQL 性能的高级用户。 #### 《MySQL技术内幕:InnoDB存储引擎(第2版)》 尽管该书主要聚焦于 InnoDB 存储引擎,但其对事务、锁机制、缓冲池、日志系统等核心模块的深入剖析,对于理解 MySQL 8.0 中 InnoDB 的增强功能具有重要意义。结合 MySQL 8.0 的原子 DDL InnoDB Cluster 等新特性,该书可作为底层机制理解的补充材料。 --- ### 示例:使用 MySQL 8.0 的窗口函数 ```sql SELECT employee_id, department_id, salary, AVG(salary) OVER(PARTITION BY department_id) AS avg_salary FROM employees; ``` 此查询展示了 MySQL 8.0 引入的窗口函数功能,可用于高效实现分组统计分析。 ---
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

水坚石青

你的鼓励是我更新的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值