MySQL 8.0 全新特性详解

图片

MySQL 8.0带来了许多令人兴奋的新特性和优化功能,下面我将逐一详细介绍每个特性:

一、原生数据字典

MySQL 8.0 引入了原生数据字典,取代了之前使用的.frm、.par、.opt等文件来存储元数据。这一改进使得元数据的访问和管理更加高效和直接。原生数据字典提供了对数据库对象元数据的统一视图,从而简化了数据库的管理和维护工作。通过查询数据字典,管理员可以快速了解数据库的结构、属性以及对象之间的关系,提高数据库的可维护性。

要启用此功能,请在my.cnf配置文件中添加以下设置:

data-encryption-key-store = KEYSTOREdata-encryption-key-store-type = FILEdata-encryption-key-store-file-path = /path/to/keystore.txt

二、角色管理

MySQL 8.0 增强了角色管理功能,允许管理员创建和管理角色,并为每个角色分配特定的权限。这使得权限管理变得更加灵活和便捷。通过角色管理,管理员可以将一组权限打包成一个角色,然后将该角色分配给多个用户,从而简化了权限的分配和回收过程。同时,角色管理还提供了权限继承、角色组合等高级功能,进一步增强了权限管理的灵活性和安全性。

通过以下命令创建角色:

CREATE ROLE 'role_name';

然后,您可以使用GRANT语句为角色分配权限:

GRANT SELECT, INSERT ON database_name.table_name TO 'role_name';

最后,将角色分配给用户:

ALTER USER 'user_name'@'localhost' ADD ROLE 'role_name';

三、窗口函数

MySQL 8.0 加入了窗口函数支持,如ROW_NUMBER()、RANK()、DENSE_RANK()等。窗口函数允许用户在查询中对数据集进行窗口分析,执行更复杂的计算任务。这使得MySQL在数据处理和分析方面的能力得到了显著提升。通过窗口函数,用户可以轻松地计算移动平均值、累计总和等,实现更高级的数据分析需求。

窗口函数有点像是 SUM()、COUNT() 那样的集合函数,但它并不会将多行查询结果合并为一行,而是将结果放回多行当中。也就是说,窗口函数是不需要 GROUP BY 的。

假设我们有一张 “班级学生人数” 表:​​​​​​​

mysql> select * from classes;+--------+-----------+| name   | stu_count |+--------+-----------+| class1 |        31 || class2 |        33 || class3 |        52 || class4 |        53 || class5 |        57 |+--------+-----------+5 rows in set (0.00 sec)

如果我要对班级人数从小到大进行排名,可以这样利用窗口函数:​​​​​​​

mysql> select *, rank() over w as `rank` from classes    -> window w as (order by stu_count);+--------+-----------+------+| name   | stu_count | rank |+--------+-----------+------+| class5 |        57 |    1 || class1 |        31 |    2 || class2 |        33 |    3 || class3 |        52 |    4 || class4 |        53 |    4 |+--------+-----------+------+5 rows in set (0.00 sec)

在这里我们创建了名为 w 的 window,规定它对 stu_count 字段进行排序,然后在 select 子句中对 w 执行 rank() 方法,将结果输出为 rank 字段。

其实,window 的创建是可选的。例如我要在每一行中加入学生总数,则可以这样:​​​​

mysql> select *, sum(stu_count) over() as total_count    -> from classes;+--------+-----------+-------------+| name   | stu_count | total_count |+--------+-----------+-------------+| class1 |        31 |         235 || class2 |        33 |         235 || class3 |        52 |         235 || class4 |        53 |         235 || class5 |        57 |         235 |+--------+-----------+-------------+5 rows in set (0.00 sec)

四、增强的JSON支持

MySQL 8.0 对JSON的支持进行了进一步增强,引入了JSON数据类型和一系列内置函数。JSON数据类型允许用户在列中直接存储JSON数据,提高了数据的灵活性和可读性。同时,MySQL 8.0还提供了一系列内置函数,如JSON_EXTRACT()、JSON_ARRAY()、JSON_OBJECT()等,用于提取、操作和验证JSON数据。这使得MySQL能够更好地处理非结构化数据,满足日益增长的数据处理需求。

例如,插入JSON数据到表中:

 INSERT INTO my_table (json_column) VALUES ('{"name": "John", "age": 30}');

查询JSON数据:

 SELECT JSON_EXTRACT(json_column, '$.name') AS name FROM my_table;

五、全球化与字符集

MySQL 8.0 默认采用utf8mb4字符集,提供了更完美的Unicode支持。这意味着MySQL 8.0可以更好地处理各种语言的数据,包括emoji字符等。同时,MySQL 8.0还增强了对不同语言、时区的支持,实现了更好的全球化。这使得MySQL成为了一个更加多语言、多文化的数据库管理系统,满足了全球化业务的需求。

六、性能与可扩展性提升

MySQL 8.0 针对InnoDB存储引擎进行了多方面的优化,包括I/O负载、元数据操作等。这些优化使得MySQL 8.0在性能和可扩展性方面有了显著提升。无论是处理大规模数据还是应对高并发场景,MySQL 8.0都能表现出色。同时,MySQL 8.0还提供了更多的配置选项和调优工具,帮助管理员更好地管理和优化数据库性能。

七、redo log重构

MySQL 8.0对redo log进行了重构,去掉了之前的锁机制,采用了区间的方式来保证数据的一致性。这种改进使得redo log的写入更加高效,提高了整体的运行效率。同时,MySQL 8.0还引入了Link_buf数据结构,使得整个模块变成了Lock_free的模式,进一步提升了性能。这种无锁化的重构使得不同的线程在写入redo_log_buffer时得以并行写入,从而提高了数据库的并发性能。

八、更简便的NoSQL支持

随着非关系型数据库和数据存储的兴起,MySQL 8.0也对NoSQL支持进行了优化。它不再依赖模式(schema),以更灵活的方式实现NoSQL功能,从而满足用户在数据处理方面的多样化需求。这使得MySQL能够更好地适应不同的应用场景,提供了更广泛的数据存储和查询选项。

九、更好的索引

MySQL 8.0新增了隐藏索引和降序索引等特性。隐藏索引可以用来测试去掉索引对查询性能的影响,帮助管理员找到最佳的索引策略。而降序索引则可以提高查询的效率,特别是对于需要按照降序排列的查询场景。这些索引优化使得MySQL在查询性能方面有了显著提升。

隐藏一个索引的语法是:

ALTER TABLE t ALTER INDEX i INVISIBLE;

恢复显示该索引的语法是:

ALTER TABLE t ALTER INDEX i VISIBLE;

当一个索引被隐藏时,我们可以从 show index 命令的输出中看到,该索引的 Visible 属性值为 NO。

注意:当索引被隐藏时,它的内容仍然是和正常索引一样实时更新的,这个特性本身是专门为优化调试使用。如果你长期隐藏一个索引,那还不如干脆删掉,因为毕竟索引的存在会影响插入、更新和删除的性能。

十、设置持久化

MySQL 8.0新增了SET PERSIST命令,允许用户将配置持久化到数据目录下的mysqld-auto.cnf文件中。这样,即使数据库重启,之前的配置也会得到保留,从而简化了配置管理的工作。这使得管理员可以更加方便地管理和调整数据库的配置,提高了数据库的可维护性。

操作 SET PERSIST 命令,例如:

SET PERSIST max_connections = 500;

MySQL 会将该命令的配置保存到数据目录下的 mysqld-auto.cnf 文件中,下次启动时会读取该文件,用其中的配置来覆盖缺省的配置文件。

总结

总的来说,MySQL 8.0的这些新特性在数据管理、安全性、性能优化等多个方面进行了改进,为用户提供了更加高效、灵活和安全的数据库管理系统。无论是处理大规模数据、应对高并发场景还是满足多样化的数据处理需求,MySQL 8.0都能提供出色的支持。

图片

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/628904.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Java基础】初识正则表达式

正则表达式只适用于字符串 匹配matches 实际使用的是String类中定义的方法boolean matches(String regex) public static void piPei( ){String regex"[1][356789]\\d{9}";boolean boo"14838384388".matches(regex);System.out.println(boo); }验证qq号…

第四篇 Asciidoc - MindMap 思维导图 不是事

MindMap 是一种对思维的简单抽象,说到底,就是一个树状结构。 以下是一个样例: Figure 1. MindMap示例 我们的目录结构、模块结构、分类结构等等,都是树型结构,它非常普遍,因此 MindMap 是笔记软件中,获得最多支持的一种图。 精确地说,这类图,是对思维结构的一种映射…

泛微OA中设置SAP接口

泛微OA中设置SAP接口 在泛微oa中有些时候我们需要对接其他系统的接口,这个时候就体现出泛微oa的强大兼容性了。只需要将其他系统的接口在集成中心中的SAP集成中配置即可。 在点击服务注册之后,需要输入服务名称,以及接口名称,并…

2024 手把手教你MathType 7.8中文破解版详细安装激活图文教程

MathType 7.8中文破解版是一款全球最受欢迎的专业数学公式编辑器工具软件,MathType可视化公式编辑器轻松创建数学方程式和化学公式.兼容Office Word,PowerPoint,Pages,Keynote,Numbers等700多种办公软件,用于编辑数学试卷,书籍,报刊,论文,幻灯演示等文档轻松编写各种复杂的物理…

Image Sensor固定模式噪声(FPN)的消除方法

本文介绍Image Sensor固定模式噪声(FPN)的消除方法。 固定模式噪声(FPN)英文全称:Fixed Pattern Noise,在Image Sensor调试过程中还是比较常见的,它的特点是噪声位置固定不变,不随采…

羊大师解读,成长路上羊大师与健康同在

羊大师解读,成长路上羊大师与健康同在 在成长的道路上,健康无疑是最宝贵的财富。让我们一同探讨如何在成长的道路上,与羊大师和健康并肩前行。 合理饮食:饮食是健康的基础。我们应该保持均衡的饮食,摄入足够的营养&am…

java02

泛型 泛型&#xff1a;编译时检查类型是不是正确&#xff0c;减少类型转换造成的错误。 代码复用性提升。 1.泛型类 T是类型形参&#xff0c;创建对象时传入类型实参。 如果不指定类型&#xff0c;按照object类型处理。不支持基本数据类型。 class Student<T>{ pr…

Java的response返回Json格式

问题 今天开发过程中&#xff0c;写了个拦截器&#xff0c;对于所以请求进行一个token的工作&#xff0c;对于不合标准的token返回错误&#xff0c;在网上找了个拦截器进行二次开发。 package com.maizhiyu.yzt.handle;import org.springframework.beans.factory.annotation.…

基于YOLOv5的道路裂缝检测,加入一种基于内容引导注意力(CGA)的混合融合提升2个多点

&#x1f4a1;&#x1f4a1;&#x1f4a1;本文主要内容:详细介绍道路裂缝检测整个过程&#xff0c;从数据集到训练模型到结果可视化分析。 &#x1f4a1;&#x1f4a1;&#x1f4a1;通过加入一种基于内容引导注意力(CGA)的混合融合提升检测性能&#xff0c; 特征融合创新 | 一…

数据结构~~带环链表的环开始的节点位置**两种方法

1.带环链表环开始的位置 &#xff08;1&#xff09;上面的这个测试用例使用的是包含了4个节点的带环链表&#xff0c;我们要找的就是链表里面的环开始的节点的位置&#xff0c;拿这个测试用例而言&#xff0c;就是2这个节点&#xff0c;从这个节点开始&#xff0c;我们的链表就…

Python代码:二、多行输出

1、题目 将字符串 Hello World! 存储到变量str1中&#xff0c;再将字符串 Hello Nowcoder! 存储到变量str2中&#xff0c;再使用print语句将其打印出来&#xff08;一行一个变量&#xff09;。 2、代码 import sys str1 Hello World! str2 Hello Nowcoder! print (str1,st…

uniapp小程序使用scroll-view组件实现上下左右滚动触发事件

在做uniapp开发小程序的时候&#xff0c;有一个需求是在一个表格区域里面可以上下左右滑动元素&#xff0c;并实现表头和左侧的标签联动效果&#xff0c;就想趣运动里面选择场地的效果一样&#xff0c;这里就用到了scroll-view组件&#xff0c;scroll-view官网文档地址&#xf…

你写HTML的时候,会注重语义化吗?

其实说到语义化&#xff0c;多年前端开发经验的老手估计也不会太在意&#xff0c;有时候工期太紧&#xff0c;有时候自己疏忽&#xff0c;也就不那么在意了&#xff0c;直接DIVCSS一把梭下去了。 目录 什么是HTML 什么是HTML语义化 HTML语义化所带来的好处 我把CSS样式引入…

手机怎么制作搞笑gif?来看看这一个方法

动态图片是现在网络中很流行的一种图片格式&#xff0c;可以把多个jpg、png格式静图变成一张gif格式的动图。在各大社交媒体中非常的受欢迎&#xff0c;用简单快速的方法传递信息。当我们想要通过手机制作gif动画的时候&#xff0c;要如何操作呢&#xff1f;这时候&#xff0c;…

长沙学院数学学院领导赴泰迪智能科技开展”访企拓岗“调研活动

5月13日&#xff0c;长沙学院数学学院党总支书记谭义红&#xff0c;副书记周新华&#xff0c;辅导员王思永莅临广东泰迪智能科技股份有限公司产交融合实训基地就深入“访企拓岗”、强化校企合作促进毕业生充分就业、创新人才培养范式等领域进行了深入交流。泰迪智能科技董事长张…

Linux系统 -目录结构与配网

目录的特点 Windows中有C盘、D盘等&#xff0c;每个都是一个根系统是个多根系统 Linux中只有一个根是个单根系统 Linux-目录存储的内容 1、/root&#xff1a;管理员的家目录 2、/home&#xff1a;存储普通用户家目录的目录/3、/tmp&#xff1a;临时目录&#xff0c;这个目录存储…

使用VMware或VirtualBox安装eNSP Pro并使用CRT连接设备

文章目录 使用Oracle Virtual Box安装eNSP Pro创建虚拟机配置网卡配置带外管理网络 使用VMware Workstation安装eNSP Pro转换文件格式及虚拟磁盘模式配置网卡创建虚拟机配置使用CRT连接管理设备 前一段时间是开放了eNSP Pro的账号权限&#xff0c;但是在写博客时&#xff0c;权…

react18【系列实用教程】memo —— 缓存组件 (2024最新版)

memo 的语法 如上图所示&#xff0c;在react中&#xff0c;当父组件重新渲染时&#xff0c;子组件也会重新渲染&#xff0c;即便子组件无任何变化&#xff0c;通过 memo 可以实现对组件的缓存&#xff0c;即当子组件无变化时&#xff0c;不再重新渲染子组件&#xff0c;核心代码…

怎么获取提取二维码链接?点击链接访问内容的方法

随着现在二维码应用的场景越来越多&#xff0c;很多的产品或者场所都会有相对应的二维码来提供信息展示&#xff0c;那么当遇到无法通过扫码获取内容的情况时&#xff0c;有什么其他方法可以访问二维码的内容呢&#xff1f;下面就让小编来分享一下二维码解码功能的使用方法&…