MySQL 9.0 GA 来了!

2024 年 7 月 2 日,MySQL 9.0 GA 版本正式发布。还记得 MySQL 8.0 版本正式发布于 2018 年 4 月 19 日,中间经过了 6 年之久,MySQL 官方终于发布了大版本号变更得 9.0 版本,接下来由我给大家介绍 MySQL 在 9.0 版本中有哪些新的变化。

本文包含如下内容:

  • MySQL 9.0 中添加或更改的功能
  • MySQL 9.0 中已弃用的功能
  • MySQL 9.0 中删除的功能

1. MySQL 9.0 中添加或更改的功能

MySQL 9.0 添加了以下功能

  • 保存 EXPLAIN 分析 JSON 输出
  • DDL 语句新增 Event 语法
  • 性能模式新添加了两个新表

1.1. 保存 EXPLAIN 分析 JSON 输出

从 MySQL 9.0.0 开始,现在支持使用下方得新语法 将 EXPLAIN 分析的 JSON 输出保存到用户变量中:

EXPLAIN ANALYZE FORMAT=JSON INTO @variable select_stmt

随后,该变量可用作任何 MySQL JSON 函数的 JSON 参数( Section 15.1.13, “CREATE EVENT Statement”)。只有 FORMAT=JSON 时才支持 INTO 子句;必须明确指定 FORMAT。这种形式的 EXPLAIN ANALYZE 还支持可选的 FOR SCHEMA 或 FOR DATABASE 子句。

注意:仅当 explain_json_format_version 服务器系统变量设置为2时,此功能才可用;否则,尝试使用它会引发 ER_EXPLAIN_ANALYZE_JSON_FORMAT_VERSION_NOT_SUPPORTED (EXPLAIN ANALYZE 不支持 FORMAT=JSON 且解释_json_format_version=1)。

1.1.1. 解释

这里直接给大家看看官网得例子,方便理解

mysql> EXPLAIN FORMAT=JSON INTO @myselect ->     SELECT name FROM a WHERE id = 2;
Query OK, 0 rows affected (0.00 sec)mysql> SELECT @myselect\G
*************************** 1. row ***************************
@myex: {"query_block": {"select_id": 1,"cost_info": {"query_cost": "1.00"},"table": {"table_name": "a","access_type": "const","possible_keys": ["PRIMARY"],"key": "PRIMARY","used_key_parts": ["id"],"key_length": "4","ref": ["const"],"rows_examined_per_scan": 1,"rows_produced_per_join": 1,"filtered": "100.00","cost_info": {"read_cost": "0.00","eval_cost": "0.10","prefix_cost": "0.00","data_read_per_join": "408"},"used_columns": ["id","name"]}}
}
1 row in set (0.00 sec)

大家都知道 EXPLAIN 可以用于分析 SQL 语句,在 MySQL 9.0 中,EXPLAIN 得语法发生了变化,在查询语句 EXPLAIN FORMAT=JSON INTO @myselect SELECT name FROM a WHERE id = 2中,EXPLAIN 后面可以接上 FORMAT=JSON INTO @myselect 语句,这样我们将 EXPLAIN 得输出结果保存到变量 myselect 中。

在保存到变量 myselect 中后,我们就可以使用 MySQL JSON 函数处理该变量,就像处理任何其他 JSON 值一样,如以下使用 JSON_EXTRACT() 的示例所示:

mysql> SELECT JSON_EXTRACT(@myselect, "$.query_block.table.key");
+----------------------------------------------------+
| JSON_EXTRACT(@myselect, "$.query_block.table.key") |
+----------------------------------------------------+
| "PRIMARY"                                          |
+----------------------------------------------------+
1 row in set (0.01 sec)mysql> SELECT JSON_EXTRACT(@myupdate, "$.query_block.table.access_type") AS U_acc,->        JSON_EXTRACT(@mydelete, "$.query_block.table.access_type") AS D_acc;
+---------+-------+
| U_acc   | D_acc |
+---------+-------+
| "range" | "ALL" |
+---------+-------+
1 row in set (0.00 sec)

关于 EXPLAIN 语句更多新的使用方式,大家可以参阅https://dev.mysql.com/doc/refman/9.0/en/explain.html#explain-execution-plan。

1.2. DDL 语句新增 Event 语法

从 MySQL 9.0.0 开始,可以使用以下 Event 语法:

  • CREATE EVENT(创建事件)
  • ALTER EVENT(修改事件)
  • DROP EVENT(删除事件)

EVENT 语句不支持使用占位符参数(?)。我们必须根据字符串文字、系统变量和用户变量的某种组合来组装要准备的语句文本。

EVENT 语句语法如下,

CREATE[DEFINER = user]EVENT[IF NOT EXISTS]event_nameON SCHEDULE schedule[ON COMPLETION [NOT] PRESERVE][ENABLE | DISABLE | DISABLE ON {REPLICA | SLAVE}][COMMENT 'string']DO event_body;schedule: {AT timestamp [+ INTERVAL interval] ...| EVERY interval[STARTS timestamp [+ INTERVAL interval] ...][ENDS timestamp [+ INTERVAL interval] ...]
}interval:quantity {YEAR | QUARTER | MONTH | DAY | HOUR | MINUTE |WEEK | SECOND | YEAR_MONTH | DAY_HOUR | DAY_MINUTE |DAY_SECOND | HOUR_MINUTE | HOUR_SECOND | MINUTE_SECOND}

EVENT 语句得语法看着比较复杂,参数众多,实际掌握一些常用参数就好了。常用语法如下,

CREATE EVENT 事件名ON SCHEDULE AT 或者 EVERY + 指定时间间隔DO 接 SQL 语句

EVENT 后面跟事件名,ON SCHEDULE 后面可以跟 AT 或者 EVERY 表示指定时间或者每隔一段时间,DO 后面接 SQL 语句,表示当满足时间条件后要执行得 SQL 语句。

1.2.1. 解释

Event 语句提供得功能跟定时任务相似,它可以在 MySQL 中定时执行一些 SQL 语句。还可以用于 MySQL 得存储过程中。接下来给大家提供一个官网例子,供大家理解,

CREATE EVENT myeventON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 HOURDOUPDATE myschema.mytable SET mycol = mycol + 1;

上面的语句创建了一个名为 myevent 的事件。该事件执行一次(创建后一小时),方法是运行一条 SQL 语句,将 myschema.mytable 表的 mycol 列的值加 1。

关于 Event 语法更多新的使用方式,大家可以参阅 https://dev.mysql.com/doc/refman/9.0/en/create-event.html。

1.3. 性能模式新添加了两个新表

Variables_metadata 表

Variables_metadata 表提供有关系统变量的一般信息。此信息包括 MySQL 服务器识别的每个系统变量的名称、范围、类型、范围(如果适用)和描述。

该表中的两列(MIN_VALUE 和 MAX_VALUE)旨在替换 Variables_info 表中已弃用的列。

Variables_metadata 表显示每个服务器系统变量的名称、范围、类型、值范围(如果适用)和说明。

global_variable_attributes 表

global_variable_attributes 表提供有关服务器分配给全局系统变量的属性值对的信息。

global_variable_attributes 表就是把 MySQL 服务器已为全局变量(例如offline_mode 或read_only)设置的属性及其值的信息用表格式用作展示。

1.3.1. 解释

性能模式新添加的两个新表就是方便大家直接在 MySQL cli 模式中直接查询系统变量以及全局变量。

有关这两个表的详细说明,大家可以参阅官网 https://dev.mysql.com/doc/refman/9.0/en/performance-schema-system-variable-tables.html。

2. MySQL 9.0 中已弃用的功能

以下功能在 MySQL 9.0 中已弃用,并且可能会在未来的系列中删除。如果 MySQL 更新说明中有显示替代方案,则你们应更新应用程序并使用它们。

对于使用 MySQL 9.0 中已弃用且已在更高 MySQL 版本中删除的功能的应用程序,从 MySQL 9.0 源复制的语句到运行更高版本的副本时,语句可能会执行失败,或者可能对源和副本产生不同的影响。为了避免此类问题,应修改使用 9.0 中已弃用功能的应用程序以避免这些问题,并尽可能使用替代方案。以下内容为弃用功能,

性能模式 variables_info 表列。 性能模式变量信息表的 MIN_VALUE 和 MAX_VALUE 列现已弃用,并且可能会在未来的 MySQL 版本中删除。相反请使用 Variables_metadata 表中具有相同名称的列(请参阅上文 1.3 章节)。

3. MySQL 9.0 中删除的功能

以下功能已过时并已在 MySQL 9.0 中删除。如果 MySQL 更新说明中有显示替代方案,则你们应更新应用程序并使用它们。

对于使用 MySQL 9.0 中删除的功能的 MySQL 8.4 应用程序,从 MySQL 8.4 源复制到 MySQL 9.0 副本时,语句可能会执行失败,或者可能对源和副本产生不同的影响。为了避免此类问题,应修改使用 MySQL 9.0 中删除的功能的应用程序以避免这些问题,并尽可能使用替代方案。

mysql_native_password 插件。mysql_native_password 身份验证插件已在 MySQL 8.0 中弃用,已被删除。服务器现在拒绝来自不具有 CLIENT_PLUGIN_AUTH 功能的旧客户端程序的 mysql_native 身份验证请求。

由于此更改,以下服务器选项和变量也已被删除:

  • --mysql-native-password 服务器选项
  • --mysql-native-password-proxy-users 服务器选项
  • default_authentication_plugin 服务器系统变量

给大家介绍一下 mysql_native_password 插件。

3.1. mysql_native_password 介绍

从 MySQL 8.0.4 开始,MySQL 默认身份验证插件从 mysql_native_password 改为 caching_sha2_password 。相应地,libmysqlclient 也使用 caching_sha2_password 作为默认的身份验证机制。

3.2. 删除起因

在这之前 MySQL 5.6/5.7 使用的默认密码插件是 mysql_native_password。mysql_native_password 的特点是不需要加密的连接。该插件验证速度特别快,但是不够安全,因为,mysql_native_password 使用的是于 SHA1 算法,NIST(美国国家标准与技术研究院)在很早之前就已建议停止使用 SHA1 算法,因为 SHA1 和其他哈希算法(例如 MD5)容易被破解。

其实从 MySQL 5.6 开始就引入了更安全的认证机制:ha256_password 认证插件。它使用一个加盐密码(salted password)进行多轮 SHA256 哈希(数千轮哈希,暴力破解更难),以确保哈希值转换更安全。但是,建立安全连接和多轮 hash 加密很耗费时间。虽然安全性更高,但是验证速度不够快。

3.3. 改进

MySQL 试图结合二者的优点。于是在 MySQL 8.0.3 版本引入了一个新的身份验证插件 caching_sha2_password ,作为sha256_password的代替方案,在sha256_password 的基础上进行了改进补上了短板,既解决安全性问题又解决性能问题。与此同时 sha256_password将退出时代的浪潮。MySQL 预计在未来版本中将其删除。使用 sha256_password 进行身份验证的 MySQL 账户建议转为 caching_sha2_password。

其实 MySQl 早就想在 8.0 版本中替换到 mysql_native_password 插件,到了 9.0 版本直接删除 mysql_native_password 功能其实提前跟大家打过招呼。

有关认证插件的更多问题,大家可以参阅官网 https://dev.mysql.com/doc/refman/9.0/en/authentication-plugins.html

4. 总结

MySQL 9.0 版本新增了 EXPLAIN 分析 JSON 输出、DDL 语句新增 Event 语法、性能模式新添加了两个新表,弃用了老版本中的 variables_info 表,删除了 mysql_native_password 认证插件。

这些更新没有带来大的功能改动,对于大多数应用程序来说影响很小,没有当年 MySQL 5.7 发布时带来的 innodb 存储引擎那种给人带来的激动感,更新说明中也没有强调性能改进(估计性能对比 8.4 版本提升不大)。不过这也说明关系型数据库 MySQL 如今的功能以及稳定性方面都已经越来越完善。

OK,这里也是祝贺 MySQL 9.0 GA 版本的发布,MySQL 作为开源界的数据库一哥,地位早已无法撼动。相信新版本将进一步巩固 MySQL 在数据库领域的领先地位,为数据库应用带来更多可能性。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++学习笔记---POCO库

在Windows系统中安装POCO 1)安装OpenSSL POCO编译安装依赖OpenSSL,如果未安装OpenSSL则应该先安装OpenSSL。 假设将OpenSSL安装在C:\OpenSSL-Win64,将C:\OpenSSL-Win64、C:\OpenSSL-Win64\lib添加到PATH环境变量中2)安装POCO 将p…

C++11新特性【下】{lambda表达式、可变模板参数、包装器}

一、lambda表达式 在C98中,如果想要对一个数据集合中的元素进行排序,可以使用std::sort方法。如果待排序元素为自定义类型,需要用户定义排序时的比较规则,随着C语法的发展,人们开始觉得上面的写法太复杂了&#xff0c…

深入理解Git:checkout的本质与原理深度解析

在Git的版本控制世界中,checkout是一个极其重要且功能丰富的命令,它贯穿于日常开发的各个环节。然而,随着Git版本的更新迭代,checkout的功能逐渐被新的命令如switch和restore所分解,但这并不妨碍我们深入理解其本质与原…

#练习 #综合 LinuxC高级

一、选择题 1.常见的Linux发行版本有很多,下面不是Linux发行版本的是( ) A. Red Hat Linux B. Ubuntu Linux C.X Window D.SuSE Linux 答案 2.下面不是对Linux操作系统特点描述的是( ) A.良好的可移植性 B.单用户 C.多用户 D.多任务 答案…

1-讯飞星火大模型API调用示例解析

1官网链接 比赛官网:2024 iFLYTEK A.I.开发者大赛-讯飞开放平台 (xfyun.cn);控制台官网:控制台-讯飞开放平台 (xfyun.cn); 2星火模型python调用示例 示例链接:https://xfyun-doc.xfyun.cn/lc-sp-PythonDemo-17163704…

了解MySQL【事务】的功能:确保数据完整性的关键技术

在数据库管理中,事务是确保数据完整性和一致性的核心机制。特别是对MySQL这样广泛应用的开源数据库系统,掌握事务的使用至关重要。在这篇文章中,我们将全面探讨MySQL事务的工作原理、ACID属性、隔离级别以及最佳实践,从而帮助开发…

宝塔Linux面板配置环境 + 创建站点

一、安装 (1)进入宝塔官网 https://www.bt.cn/new/index.html (2)点击“ 立即免费安装 ”,选择 Centos安装脚本 (3)进入 ssh 输入以下命令安装宝塔 yum install -y wget && wget -O …

实验三 SQL Server SSMS工具添加数据

1、打开ecommerce数据库,向表中分别录入以下数据信息 (1)商品类别表category catno catname describe 101 手机 各种品牌、型号手机 201 激光打印机 各种激光打印机 202 喷墨打印机 各种喷墨打印机 301 平板电脑 各种平板电脑…

Python后端面试题

1. 文件操作w和r的区别 在Python中,文件操作模式中的w和r都表示对文件的读写操作,但它们在打开文件时的行为有所不同: r模式: 读写:这种模式允许你同时读取和写入文件。文件必须已经存在,否则会抛出一个Fi…

思看科技募资额骤降:对赌压力下巨额分红,还购买 7项商业房产

《港湾商业观察》施子夫 6月11日,证监会网站披露思看科技(杭州)股份有限公司(以下简称,思看科技)的首轮审核问询函回复意见并更新2023年财务数据,继续推进上市进程。 公开信息显示&#xff0c…

低空经济背景下的无人机人才培养

无人机作为低空经济的重要组成部分,其技术的进步和应用的拓展直接推动了低空经济的快速发展。无人机以其高效、灵活、低成本的特点,在多个领域发挥了重要作用,成为推动低空经济发展的重要力量。 无人机人才培养的重要性 随着无人机应用的不…

深度之眼(二十九)——神经网络基础知识(四)-循环神经网络

文章目录 一、 学习目标二、序列数据三、语言模型四、循环神经网络4.1 RNN的反向传播 五、门控循环单元-GNU5.1 候选隐藏状态 六、长短期记忆网络-LSTM七、回顾 一、 学习目标 二、序列数据 序列数据是常见的数据类型,前后数据通常具有关联性 三、语言模型 综合…

【技术杂谈】如何访问Github | 解决无法连接Github的问题

访问网页的过程 什么是域名?什么是IP地址?- 域名是网站的名称。 - IP地址是服务器在互联网上的逻辑地址。域名往往是固定的,但是IP地址很有可能是会改变的。计算机通过Host文件检查本地缓存是否有域名对应IP地址 Host文件路径 C:\Windows\Sy…

C#反射基本应用

1、反射 反射是.NET Framework的一个特性,它允许在运行时获取类型的信息以及动态创建对象,调用方法,以及访问字段和属性。 2、代码 using System; using System.Collections.Generic; using System.Linq; using System.Reflection; using Sy…

Node.js path模块

在 Node.js 中,path 模块用于处理和转换文件路径。以下是一些常用的 path 模块方法及其说明: path.basename(path[, ext]) 返回路径中的最后一部分,即文件名。示例:const path require(path); console.log(path.basename(/foo/ba…

ShardingSphere分库分表+读写分离

ShardingSphere 是一个开源的分布式数据库中间件,它支持分库分表和读写分离的功能,可以有效地提高数据库的并发处理能力和数据存储能力。以下是关于 ShardingSphere 分库分表和读写分离的一些关键点: 1. **读写分离**:在 Shardin…

Python中使用Oracle向量数据库实现文本检索系统

Python中使用Oracle向量数据库实现文本检索系统 代码分析 在本文中,我们将深入分析一个使用Oracle向量数据库实现文本检索系统的Python代码,并基于相同的技术生成一个新的示例。这个系统允许我们存储文档及其嵌入向量,并执行相似性搜索。 代码分析 让我们逐步分析原始代码的主…

探究Executors创建的线程池(如newFixedThreadPool)其核心线程数等参数的可调整性

java中提供Executors类来创建一些固定模板参数的线程池,如下图(newWorkStealingPool除外,这个是创建ForkJoinPool的,这里忽略): 拿newFixedThreadPool方法创建线程池为例,newFixedThreadPool是…

白杨SEO:打粉是啥?打粉引流怎么做?打粉引流犯法吗?小红书代发效果好吗?

文章大纲: 1、打粉是什么意思? 2、打粉有哪些方法? 3、打粉一般怎么变现? 4、打粉引流是违法犯罪吗? 5、小红书代发是啥? 6、小红书批量代发效果好吗? 打粉是什么意思? 打粉这…

第1章 firewalld防火墙

防火墙 概念 支持网络区域所定义的网络链接以及接口安全等级的动态防火墙管理工具支持IPv4、IPv6防火墙设置以及以太网桥支持服务或应用程序直接添加防火墙规则接口拥有两种配置模式 运行时配置:添加的策略立即生效,不用重载防火墙,策略临时…