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

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有一个重要的组成部分——数据表。 MySQL数据表是数据组织的逻辑单元,其中数据按行和列组织,类似于电子表格或Excel中的表格。在这个表格中,数据按照特定的格式和范围存储、分类和访问。 以下是MySQL创建数据库表的方法。 创建命令 MySQL的创建表命令结构如下所示:…

    MySQL 2023年3月9日
    00
  • mysql启动错误之mysql启动报1067错误解决方法

    下面是关于“mysql启动错误之mysql启动报1067错误解决方法”的完整攻略: 一、问题分析 当我们在启动mysql服务时,可能会遇到报错,其中之一就是Error 1067,该错误一般的错误提示是:The process terminated unexpectedly.,导致mysql服务启动失败。那么,在使用mysql的过程中,遇到这个问题怎么办呢? …

    MySQL 2023年5月18日
    00
  • MySQL中表锁和行锁机制浅析(源码篇)

    MySQL中表锁和行锁机制浅析(源码篇)详解 引言 MySQL在多个并发事务操作下,采用锁机制保证数据的一致性和并发量。MySQL锁机制主要分为表锁和行锁。本文将分析MySQL中表锁和行锁机制的源码实现原理及其应用。 表锁 概念 表锁的应用范围为整张表,在操作时会锁定整张表,其他事务将无法读写该表。 应用场景 表锁适用于以下场景: 对整张表进行DDL操作(如…

    MySQL 2023年5月19日
    00
  • MySQL ERROR 1045 (28000): Access denied for user ‘root’@’localhost’ (using password: NO) 的原因分解决办法

    这里我来详细讲解MySQL ERROR 1045 (28000)的原因分解决办法。首先,让我们来看看这个错误提示的含义: MySQL ERROR 1045 (28000): Access denied for user ‘root’@’localhost’ (using password: NO) 这个错误提示通常表示在连接MySQL数据库时,使用的用户名或…

    MySQL 2023年5月18日
    00
  • Node.js和mybatis分别实现mysql中like变量模糊查询

    <!– mybatis –> <where> <if test=”varName != ” and varName != null” > var_name like ‘%${varName}%’ </if> </where>    //node 变量 if (data.varName &amp…

    MySQL 2023年4月13日
    00
  • MySQL循环语句实例教程 mysql while循环测试

    在mysql数据库中操作同样有循环语句操作,标准的循环方式: while 循环 、 loop 循环和repeat循环。还有一种非标准的循环: goto。 鉴于goto 语句的跳跃性会造成使用的的思维混乱,所以不建议使用。 这几个循环语句的格式如下:WHILE……DO……END WHILEREPEAT……UNTIL END REPEATLOOP……END LO…

    MySQL 2023年4月13日
    00
  • MySQL解决Navicat设置默认字符串时的报错问题

    下面是“MySQL解决Navicat设置默认字符串时的报错问题”的解决攻略: 问题描述 在使用Navicat等MySQL管理工具时,有时需要为表中的字段设置默认字符串,错误地设置默认值可能会导致”Invalid Default Value for ***“报错。 解决步骤 首先,确认MySQL服务器的版本。MySQL 5.7之后的版本默认开启了STRICT_…

    MySQL 2023年5月18日
    00
  • 将MySQL从MyISAM转换成InnoDB错误和解决办法

    将MySQL从MyISAM转换成InnoDB是一个比较常见的操作,因为InnoDB相较于MyISAM有更多的优点,例如支持事务、外键等。但是在将数据库从MyISAM转换成InnoDB时,可能会遇到一些错误。下面是将MySQL从MyISAM转换成InnoDB的完整攻略,包括错误和解决办法: 1.备份数据 在进行任何数据库操作之前,一定要备份数据,以防不测。可以…

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