谈谈MySQL 9.0 中的新增功能,支持JavaScript存储程序,弃用SHA-1

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,集群系列 2核4GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 【7月更文挑战第29天】

MySQL 作为全球最受欢迎的开源数据库管理系统之一,一直在不断地发展和演进。2024年7月,Oracle 推出了 MySQL 9.0,这是一个具有众多创新功能和改进的新版本。

Vector 数据类型

Vector 数据类型的引入是 MySQL 9.0 中的一大亮点。向量(Vector)在机器学习、数据科学和高性能计算中有着广泛的应用。MySQL 通过支持新的 Vector 数据类型,使其在处理高维数据和复杂计算方面的能力得到了显著增强。

Vector 数据类型允许用户存储和操作多维向量。使用 Vector 数据类型,用户可以更高效地进行批量处理、并行计算和复杂查询。例如,在图像处理、自然语言处理等领域,向量可以用于表示图像特征、文本特征等。

向量数据类型的定义和操作可以通过标准的 SQL 语句完成。例如:

CREATE TABLE vectors (
    id INT AUTO_INCREMENT PRIMARY KEY,
    feature_vector VECTOR(256)
);

INSERT INTO vectors (feature_vector) VALUES
    (VECTOR(1.0, 0.0, 0.5, ..., 0.3)),
    (VECTOR(0.2, 0.1, 0.0, ..., 0.4));

用户可以利用 MySQL 的查询功能对向量进行操作,如计算向量之间的距离、聚类等。

JavaScript 存储程序

JavaScript 存储程序的引入是 MySQL 企业版中的一个重要新功能。这个功能允许用户使用 JavaScript 语言编写存储过程和函数,从而为数据库编程提供了更多的灵活性和可能性。

JavaScript 存储程序是一种用 JavaScript 编写的存储过程或函数,它可以调用 SQL 语句,也可以被 SQL 语句调用。这种双向调用机制极大地增强了数据库编程的灵活性和功能性。

在 MySQL 9.0 中,JavaScript 存储程序的实现基于 MySQL 企业版的扩展功能。用户可以使用 MySQL 提供的内置 JavaScript 引擎来编写和执行 JavaScript 存储程序。例如:

CREATE FUNCTION calculate_total_price(item_id INT, quantity INT) RETURNS DOUBLE
LANGUAGE JAVASCRIPT
BEGIN
    var unit_price = 0;
    var result = db.query("SELECT price FROM items WHERE id = ?", [item_id]);
    if (result.length > 0) {
        unit_price = result[0].price;
    }
    return unit_price * quantity;
END;

上述示例展示了如何创建一个 JavaScript 存储函数,该函数根据商品 ID 和数量计算总价。

JavaScript 存储程序适用于需要复杂逻辑处理的场景。例如,在电子商务应用中,用户可以使用 JavaScript 存储程序实现购物车计算、订单处理等复杂业务逻辑。

库和编译器更新

MySQL 9.0 转向了较新版本的库和编译器,包括 Linux 8 和 9 上的 GCC13 以及 Boost 1.85。这些更新不仅提升了 MySQL 的性能,还增强了其安全性和稳定性。

使用更新的库和编译器,MySQL 9.0 在处理效率、内存管理和并发控制方面有了显著提升。例如,GCC13 引入了许多新的优化技术,使得编译后的二进制文件运行速度更快,占用资源更少。

虽然这些更新带来了性能提升,但也要求用户在升级时注意与旧版本的兼容性问题。特别是对于自定义编译的用户,需要确保所有依赖库和编译器版本的一致性。

事件调度程序改进

MySQL 9.0 对事件调度程序进行了改进,用户现在可以在事件调度程序中准备 SQL 语句,如 CREATE EVENTALTER EVENTDROP EVENT

事件调度程序是一种用于在预定时间或间隔执行任务的机制。在数据库管理中,事件调度程序常用于自动化数据备份、定期报告生成等任务。

在 MySQL 9.0 中,用户可以更加灵活地管理和调度事件。例如:

CREATE EVENT my_event
ON SCHEDULE EVERY 1 HOUR
DO
BEGIN
    CALL update_statistics();
END;

上述示例展示了如何创建一个每小时运行一次的事件,该事件调用存储过程 update_statistics

这些改进使得事件调度程序更加易用和强大,适用于需要定时任务的各种应用场景,如数据同步、日志清理等。

弃用与移除功能

在引入新功能的同时,MySQL 9.0 也移除了部分过时和不安全的功能,以确保系统的安全性和可靠性。

移除 SHA-1

SHA-1 是一种已被证实不安全的哈希算法。在 MySQL 9.0 中,SHA-1 相关的功能已被彻底移除,服务器现在拒绝来自不具备 CLIENT_PLUGIN_AUTH 功能的旧客户端程序的 mysql_native 身份验证请求。

用户账户密码更改

在升级到 9.0 之前,用户必须将 8.0 和 8.4 中的用户账户从 mysql_native_password 更改为 caching_sha2_password。这不仅提高了密码的安全性,还增强了系统的整体防护能力。

优化器中的更改

在优化器中,ER_SUBQUERY_NO_1_ROW 已从包含 IGNORE 关键字的语句忽略的错误列表中删除。这意味着,如果包含 IGNORE 关键字的 UPDATEDELETEINSERT 语句包含带有生成多行的标量子查询的 SELECT 语句,这些语句将引发错误。

MySQL 9.0 作为一个创新版本,引入了许多新功能和改进,这些变化不仅提升了 MySQL 的性能和功能,还增强了其安全性和可用性。向量数据类型的支持、JavaScript 存储程序的引入、库和编译器的更新以及事件调度程序的改进,都是 MySQL 9.0 的亮点功能。

未来,MySQL 将继续保持快速的更新节奏,每三个月发布一个版本,每两年发布一个主要 LTS 版本。根据 Oracle 的计划,2024 年 10 月将发布 MySQL 8.4.2 LTS 和 MySQL 8.0.39 的错误和安全修复版本,以及 MySQL 9.1 Innovation 版本,届时将引入更多新功能和改进。

通过不断的创新和改进,MySQL 正在逐步满足各种复杂应用场景的需求,继续引领开源数据库领域的发展。对于开发者和企业用户来说,了解和掌握这些新功能,可以帮助他们更好地利用 MySQL 提供的强大功能和高效性能,从而实现更卓越的数据管理和应用开发。

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
1月前
|
存储 关系型数据库 MySQL
【告别容量焦虑】RDS MySQL高性能本地盘全规格最大存储空间提升,最高可达16TB!
RDS MySQL存储能力狂飙升级,高性能本地盘全规格最大存储空间提升,最高可达16TB!这波升级,值得一试!
|
3月前
|
程序员 UED Python
Python入门:3.Python的输入和输出格式化
在 Python 编程中,输入与输出是程序与用户交互的核心部分。而输出格式化更是对程序表达能力的极大增强,可以让结果以清晰、美观且易读的方式呈现给用户。本文将深入探讨 Python 的输入与输出操作,特别是如何使用格式化方法来提升代码质量和可读性。
Python入门:3.Python的输入和输出格式化
|
3月前
|
机器学习/深度学习 人工智能 算法框架/工具
Python入门:1.Python介绍
Python是一种功能强大、易于学习和运行的解释型高级语言。由**Guido van Rossum**于1991年创建,Python以其简洁、易读和十分工程化的设计而带来了庞大的用户群体和丰富的应用场景。这个语言在全球范围内都被认为是**创新和效率的重要工具**。
Python入门:1.Python介绍
|
13天前
|
数据管理 开发者 Python
揭秘Python的__init__.py:从入门到精通的包管理艺术
__init__.py是Python包管理中的核心文件,既是包的身份标识,也是模块化设计的关键。本文从其历史演进、核心功能(如初始化、模块曝光控制和延迟加载)、高级应用场景(如兼容性适配、类型提示和插件架构)到最佳实践与常见陷阱,全面解析了__init__.py的作用与使用技巧。通过合理设计,开发者可构建优雅高效的包结构,助力Python代码质量提升。
65 10
|
2月前
|
存储 关系型数据库 MySQL
MySQL细节优化:关闭大小写敏感功能的方法。
通过这种方法,你就可以成功关闭 MySQL 的大小写敏感功能,让你的数据库操作更加便捷。
163 19
|
1月前
|
数据采集 数据可视化 大数据
Python入门修炼:开启你在大数据世界的第一个脚本
Python入门修炼:开启你在大数据世界的第一个脚本
78 6
|
1月前
|
数据可视化 流计算 Python
Python创意爱心代码大全:从入门到高级的7种实现方式
本文分享了7种用Python实现爱心效果的方法,从简单的字符画到复杂的3D动画,涵盖多种技术和库。内容包括:基础字符爱心(一行代码实现)、Turtle动态绘图、Matplotlib数学函数绘图、3D旋转爱心、Pygame跳动动画、ASCII艺术终端显示以及Tkinter交互式GUI应用。每种方法各具特色,适合不同技术水平的读者学习和实践,是表达创意与心意的绝佳工具。
707 0
|
2月前
|
关系型数据库 MySQL 数据库
|
3月前
|
开发者 Python
Python入门:8.Python中的函数
### 引言 在编写程序时,函数是一种强大的工具。它们可以将代码逻辑模块化,减少重复代码的编写,并提高程序的可读性和可维护性。无论是初学者还是资深开发者,深入理解函数的使用和设计都是编写高质量代码的基础。本文将从基础概念开始,逐步讲解 Python 中的函数及其高级特性。
Python入门:8.Python中的函数
|
3月前
|
存储 索引 Python
Python入门:6.深入解析Python中的序列
在 Python 中,**序列**是一种有序的数据结构,广泛应用于数据存储、操作和处理。序列的一个显著特点是支持通过**索引**访问数据。常见的序列类型包括字符串(`str`)、列表(`list`)和元组(`tuple`)。这些序列各有特点,既可以存储简单的字符,也可以存储复杂的对象。 为了帮助初学者掌握 Python 中的序列操作,本文将围绕**字符串**、**列表**和**元组**这三种序列类型,详细介绍其定义、常用方法和具体示例。
Python入门:6.深入解析Python中的序列