MySQL 9.0 GA 来了!

news2025/1/18 20:15:16

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_name
    ON 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 myevent
    ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 HOUR
    DO
      UPDATE 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.coloradmin.cn/o/1894777.html

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

相关文章

经典低功耗四通道运算放大器LM324

前言: SOP14封装LM324 这个LM324运放有几十年的历史了吧?很普通,很常用,搞电路的避免不了接触运放,怎么选择运放,是工程师关心的问题吧? 从本文开始,将陆续发一些常用的运放&#xf…

2024 AI工程师世界博览会

6月24日至6月27日在旧金山举行的 AI 工程师世界博览会是AI 从业者和爱好者的首要活动之一。本次年度会议展示了人工智能技术的最新进展,并提供了对行业趋势的宝贵见解。 模型不是壁垒 大型语言模型(LLMs)的快速发展是会议的中心主题。OpenAI…

单片机软件架构连载(4)-结构体

枚举、指针、结构体,我愿称为C语言"三板斧"。 用人话来讲,几乎所有c语言高阶编程,都离不开这这3个知识点的应用。 今天站在实际产品常用的角度,给大家讲一下结构体。 1.结构体概念 结构体可以用来构建更复杂的数据结…

【病毒分析】假冒游戏陷阱:揭秘MBRlock勒索病毒及其修复方法

1.背景 在公众号文章中看到一篇名为《敲竹杠木马分析:虚假的植物大战僵尸杂交版》的文章,样本来源于某吧,对此我们对样本进行了提取分析。 文章链接:https://mp.weixin.qq.com/s/Up9u4DZtHnVNMiGBIHZzHw 2.恶意文件基础信息 文…

鸿蒙开发设备管理:【@ohos.update (升级)】

升级 说明: 本模块首批接口从API version 6开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。开发前请熟悉鸿蒙开发指导文档:gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md点击或者复制转到。 升级范围&…

Build a Large Language Model (From Scratch)附录B(gpt-4o翻译版)

来源:https://github.com/rasbt/LLMs-from-scratch?tabreadme-ov-file https://www.manning.com/books/build-a-large-language-model-from-scratch

上海-灵曼科技(面经)

上海-灵曼科技 hr电话面 个人简介 个人信息的询问 是否知道芋道框架 技术面 算法题 14. 最长公共前缀(写出来即可) 聊一下Docker Docker核心概念总结Docker实战 聊一下AOP Spring AOP详解 聊一下JWT JWT 基础概念详解JWT 身份认证优缺点分析 Spri…

智能猫砂盆到底哪家好用?自费实测聚宠、糯雪、CEWEY真实反馈!

快到夏天了,是不是还有人因为没挑选到喜欢的智能猫砂盆而苦恼着?太便宜怕不好用,太贵怕质量比不上价格。来来去去拖到现在还没决定,我作为养了四年猫的资深铲屎官,今天就来给大家传授经验,关于我是怎么从好…

记录通过Cloudflare部署属于自己的docker镜像源

引言 由于最近国内无法正常拉取docker镜像,然而找了几个能用的docker镜像源发现拉取回来的docker镜像不是最新的版本,部署到Cloudflare里Workers 和 Pages,拉取docker 镜像成功,故记录部署过程。 部署服务 登录Cloudflare后&…

Xilinx FPGA:vivado关于RAM的一些零碎的小知识

一、xilinx fpga嵌入式存储单元 RAM----随机存取存储器:上电工作时可以随时从任何一个指定的地址写入(存入)或读出(取出)信息。缺点是一旦断电所存储的数据将随之丢失。RAM在计算机和数字系统中用来暂时性存储程序、数…

openlayers中区域掩膜的实现

概述 在前文完成了mapboxGL中区域掩膜的实现。近日有人问到说在openlayers中如何实现,本文就带大家看看如何在openlayers中实现区域掩膜。 实现效果 实现 1. 实现思路 在地图容器中添加一个canvas,设置其在map之上;监听map的postrender事…

1-认识网络爬虫

1.什么是网络爬虫 ​ 网络爬虫(Web Crawler)又称网络蜘蛛、网络机器人,它是一种按照一定规则,自动浏览万维网的程序或脚本。通俗地讲,网络爬虫就是一个模拟真人浏览万维网行为的程序,这个程序可以代替真人…

在虚拟仿真中学习人工智能,可以达到什么目标?

人工智能已经成为引领社会创新的关键力量,想要在这个充满机遇的领域中脱颖而出,掌握扎实的专业技能和积累丰富的实践经验至关重要。然而,许多学习者在追求这一目标的过程中面临着几个主要问题:专业技术掌握有难度、实践经验积累存…

【算法训练记录——Day41】

Day41——动态规划Ⅲ 1.理论基础——代码随想录2.纯01背包_[kamacoder46](https://kamacoder.com/problempage.php?pid1046)3.leetcode_416分割等和子集 背包!! 1.理论基础——代码随想录 主要掌握01背包和完全背包 物品数量: 只有一个 ——…

(十三)MipMap

MipMap概念 滤波 采样 mipmap级别判定 问题:opengl如何判定应该使用下一级的mipmap呢? 通过glsl中的求偏导函数计算变化量决定 手动实现mipmap原理 1、生成mipmap的各个级别 2、修改vertexShader使得三角形随着时间变小 **** 需要更改Filter才能…

如何在操作使用ufw设置防火墙

UFW(简单防火墙)是用于管理iptables防火墙规则的用户友好型前端。它的主要目标是使iptables的管理更容易。 在学习Linux的时候大家一般都会关心命令,Posix API和桌面等,很少会去了解防护墙。其实除了一些网络安全厂商提供的付费防…

Zabbix 配置MySQL数据库监控

Zabbix MySQL数据库监控简介 通过 Zabbix 监控 MySQL 数据库,可以获取有关数据库性能、运行状况和资源使用情况的详细信息,帮助及时发现和解决问题。 Zabbix官方提供了一个名为MySQL by Zabbix agent的监控模板,该模板专为 Zabbix 通过 Zabb…

波动方程 - 在三维图中动态显示二维波动方程的解就像水面波澜起伏

波动方程 - 在三维图中动态显示二维波动方程的解就像水面波澜起伏 flyfish 波动方程的求解结果通常不是一个单一的数值,而是一个函数或一组函数,这些函数描述了波随时间和空间的传播情况。具体来说,波动方程的解可以是关于时间和空间变量的…

技术驱动旅游创新!深度解析景区导览小程序的地图渲染与AR导航技术

随着现代生活节奏的加快,人们在外出旅游时更倾向于轻便出行,携带导览地图已成为过去。然而,面对景区广阔的面积和众多景点,游客常常感到迷茫,难以快速定位到自己所需的地点。景区导览小程序让游客只需搜索景区名称&…

PyQT: 开发一款ROI绘制小程序

在一些基于图像或者视频流的应用中,比如电子围栏/客流统计等,我们需要手动绘制一些感兴趣(Region of Interest,简称ROI)区域。 在这里,我们基于Python和PyQt5框架开发了一款桌面应用程序,允许用…