MySQL8.0与MySQL5.7的区别详解

yizhihongxing

MySQL 8.0 与 MySQL 5.7 的区别详解

MySQL 8.0 相对于 MySQL 5.7 ,在很多方面做了重大的更新和改进。下面详细讲解 MySQL 8.0 与 MySQL 5.7 的区别。

新增特性和功能

MySQL 8.0 版本增加了许多新的功能和特性,比如下面几个。

安全性

MySQL 8.0 增强了安全性,除了支持更多的密钥长度之外,还可以设置密码过期时间和密码策略,并且可以进行密码强度校验。

JSON

MySQL 8.0 引入了更加全面的 JSON 支持,包括更高效的查询、多项函数、索引等。它使得开发者可以更方便地使用 JSON 数据。

CTE

MySQL 8.0 以前的版本不支持公共表表达式(CTE),但 MySQL 8.0 引入了 CTE,这个由于其编写和查询机制的巨大优势而成为了一个非常流行的查询工具。

Common Table Expressions (CTE)

CTE 是针对临时表或者长 SQL 查询语句的一种方案,可以将复杂的 SQL 查询语句拆分成多个简单的查询语句,并且可以在查询语句中多次使用。比如下面这个查询语句用 CTE 实现。

WITH RECURSIVE cte (id, parent_id, level) AS (
  SELECT id, parent_id, 0 FROM mytable WHERE parent_id IS NULL
  UNION ALL
  SELECT mytable.id, mytable.parent_id, cte.level + 1 FROM mytable JOIN cte ON mytable.parent_id = cte.id
)
SELECT * FROM cte;

其中,WITH RECURSIVE 定义了一个 CTE,SELECT id, parent_id, 0 FROM mytable WHERE parent_id IS NULL 定义了 CTE 的第一段 SQL 查询语句,UNION ALL 定义了下一段 SQL 查询语句的执行条件。这样就可以得到一条查询语句也可以多次使用。

性能提升

MySQL 8.0 相对于 MySQL 5.7 在性能方面也进行了一些优化,比如下面。

原子性操作

MySQL 8.0 引入了原子性操作,不仅在单个语句中实现了多依赖关系的高性能维护,而且在两个或多个事务中间计算允许更高的并发性。

存储引擎

MySQL 8.0 针对 InnoDB 存储引擎做了许多优化,比如支持更大的缓存池和更快的压缩等等。

示例说明

将 NULL 改为 NOT NULL

在 MySQL 8.0 版本中,如果要将某个列由 NULL 改为 NOT NULL,需要分两步完成,先使用 MODIFIED 语句修改表结构,再进行 ALTER 命令更改列的约束规则。示例代码如下:

ALTER TABLE mytable MODIFY COLUMN mycolumn int NOT NULL;
ALTER TABLE mytable ALTER COLUMN mycolumn SET DEFAULT 0;

存储过程和引用游标

在 MySQL 8.0 版本中,如果要使用游标的话,就需要事先定义一个存储过程,示例代码如下:

CREATE PROCEDURE my_proc () BEGIN
  DECLARE done INT DEFAULT FALSE;
  DECLARE my_cursor CURSOR FOR SELECT * FROM mytable;
  DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
  OPEN my_cursor;
  my_loop: LOOP
    FETCH my_cursor INTO some_var;
    IF done THEN
      LEAVE my_loop;
    END IF;
  END LOOP my_loop;
  CLOSE my_cursor;
END;

其中,CURSOR 定义游标,CONTINUE HANDLER 处理游标中没有数据的情况,LOOP 执行循环操作。

结论

MySQL 8.0 相对于 MySQL 5.7 有很多更新和改进,包括性能提升、新增特性和功能。这些更新和改进可以为开发者和管理员提供更加高效、快速、安全和灵活的数据库提供支持。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:MySQL8.0与MySQL5.7的区别详解 - Python技术站

(1)
上一篇 2023年5月18日
下一篇 2023年5月18日

相关文章

  • MySQL表设计与优化

    影响MySQL查询性能的因素有很多,我们经常会对查询语句、索引字段做一些优化,而其实在表设计的阶段就可能产生一些问题。对于表设计,可以对表结构进行优化,也可以对表字段进行优化。以下通过一个具体的案例演示一些常用的表设计优化的方法。 一、业务需求 这里,就以学生-教师-课程业务作为示例。数据库需要存放学生、教师、课程相关信息。学生信息包括学号、姓名、性别、专业…

    MySQL 2023年4月17日
    00
  • 深入理解MySQL索引底层数据结构

    在日常工作中,我们会遇见一些慢SQL,在分析这些慢SQL时,我们通常会看下SQL的执行计划,验证SQL执行过程中有没有走索引。通常我们会调整一些查询条件,增加必要的索引,SQL执行效率就会提升几个数量级。我们有没有思考过,为什么加了索引就会能提高SQL的查询效率,为什么有时候加了索引SQL执行反而会没有变化,本文就从MySQL索引的底层数据结构和算法来进行详…

    2023年4月8日
    00
  • GaussDB(DWS)字符串处理函数返回错误结果集排查

    摘要:在使用字符串处理函数时,有时会出现非预期结果的场景。在排除使用问题后,应该从encoding和数据本身开始排查。 本文分享自华为云社区《GaussDB(DWS)字符串处理函数返回错误结果集排查》,作者: -CHEN111- 。 在使用字符串处理函数时,有时会出现非预期结果的场景。在排除使用问题后,应该从encoding和数据本身开始排查。 直接从案例出…

    MySQL 2023年5月6日
    00
  • mysql8.0.14.zip安装时自动创建data文件夹失败服务无法启动

    首先,根据描述可以得知,在安装mysql8.0.14.zip时,自动创建data文件夹失败导致无法启动服务。针对此问题,我们可以采取以下步骤进行解决: 1.手动创建data文件夹 在zip安装包解压后的目录下,找到mysql-8.0.14-winx64文件夹,进入该文件夹下的bin目录,在地址栏输入cmd打开命令行窗口。 在命令行窗口内运行如下命令: mkd…

    MySQL 2023年5月18日
    00
  • 一文搞懂高并发下的数据库事务隔离级别

    在高并发的场景下,数据库事务隔离级别非常重要,它影响了数据库并发操作的正确性、性能和可靠性。 数据库事务隔离级别分为四种: Read uncommitted(读未提交) Read committed(读已提交) Repeatable read(可重复读) Serializable(串行化) Read uncommitted(读未提交) 该隔离级别的数据库事务…

    Matplotlib 2023年3月10日
    00
  • 使用MySQL Slow Log来解决MySQL CPU占用高的问题

    使用MySQL Slow Log来解决MySQL CPU占用高的问题,可以通过以下步骤实现: 1. 开启MySQL Slow Log 在MySQL配置文件(一般为my.cnf或者my.ini)中开启slow_query_log,并且设置slow_query_log_file,如下所示: slow_query_log = 1 slow_query_log_fi…

    MySQL 2023年5月19日
    00
  • 云图说|云数据库GaussDB如何做到卓越性能

    摘要:对于数据库来说,性能一直被视为最关键的部分。GaussDB作为华为自主创新研发的分布式关系型数据库,那么华为云数据库GaussDB在提升数据库性能方面都有哪些黑科技呢? 本文分享自华为云社区《【云图说】第275期 云数据库GaussDB如何做到卓越性能》,作者:阅识风云。 对于数据库来说,性能一直被视为最关键的部分。GaussDB作为华为自主创新研发的…

    MySQL 2023年4月17日
    00
  • MySQL创建视图(CREATE VIEW)

    MySQL中的视图是一个虚拟表,其内容基于 SELECT 语句定义,可以被用户查询。视图使得我们可以简化复杂的查询和抽象复杂的数据结构,从而提高数据查询和管理的效率。 创建视图的基本语法如下: CREATE VIEW view_name AS SELECT column1, column2, … FROM table WHERE condition; 其…

    MySQL 2023年3月10日
    00
合作推广
合作推广
分享本页
返回顶部