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

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 【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 提供的强大功能和高效性能,从而实现更卓越的数据管理和应用开发。

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
5天前
|
测试技术 数据库 UED
Python 性能测试进阶之路:JMeter 与 Locust 的强强联合,解锁性能极限
【9月更文挑战第9天】在数字化时代,确保软件系统在高并发场景下的稳定性至关重要。Python 为此提供了丰富的性能测试工具,如 JMeter 和 Locust。JMeter 可模拟复杂请求场景,而 Locust 则能更灵活地模拟真实用户行为。结合两者优势,可全面评估系统性能并优化瓶颈。例如,在电商网站促销期间,通过 JMeter 模拟大量登录请求并用 Locust 模拟用户浏览和购物行为,可有效识别并解决性能问题,从而提升系统稳定性和用户体验。这种组合为性能测试开辟了新道路,助力应对复杂挑战。
20 2
|
1天前
|
SQL JavaScript 前端开发
基于Python访问Hive的pytest测试代码实现
根据《用Java、Python来开发Hive应用》一文,建立了使用Python、来开发Hive应用的方法,产生的代码如下
12 6
基于Python访问Hive的pytest测试代码实现
|
3天前
|
存储 人工智能 数据挖掘
Python编程入门:从基础到实战
【9月更文挑战第10天】本文将引导你进入Python编程的世界,从基本语法到实际项目应用,逐步深入。我们将通过简单的例子和代码片段,帮助你理解并掌握Python编程的精髓。无论你是编程新手还是有一定经验的开发者,都能在这篇文章中找到有价值的信息。让我们一起开始Python编程之旅吧!
|
5天前
|
Web App开发 Java 测试技术
自动化测试的利器:Selenium WebDriver入门与实践
【9月更文挑战第8天】在软件开发的海洋中,测试是确保我们不会溺水的那根救生索。Selenium WebDriver,作为自动化测试的明星工具,让这根救生索更加结实可靠。本文将带你快速上手Selenium WebDriver,从基础设置到实际操作,再到实战演练,让你的开发之旅更加平稳顺畅。
|
1天前
|
SQL 安全 数据库
从入门到精通:Python Web安全守护指南,SQL注入、XSS、CSRF全防御!
【9月更文挑战第13天】在开发Python Web应用时,安全性至关重要。本文通过问答形式,详细介绍如何防范SQL注入、XSS及CSRF等常见威胁。通过使用参数化查询、HTML转义和CSRF令牌等技术,确保应用安全。附带示例代码,帮助读者从入门到精通Python Web安全。
14 6
|
4天前
|
开发者 Python
探索Python中的装饰器:从入门到实践
【8月更文挑战第41天】本文通过深入浅出的方式,引导读者理解Python装饰器的概念、原理及应用。我们将从装饰器的定义出发,逐步深入其背后的工作原理,并通过实际代码示例,展示如何自定义装饰器以及装饰器的高级用法。文章旨在帮助初学者快速掌握装饰器的使用,同时为有一定基础的开发者提供进阶知识。
|
4天前
|
安全 JavaScript 前端开发
自动化测试的魔法:如何用Python编写你的第一个测试脚本
【8月更文挑战第41天】在软件的世界里,质量是王道。而自动化测试,就像是维护这个王国的骑士,确保我们的软件产品坚不可摧。本文将引导你进入自动化测试的奇妙世界,教你如何使用Python这把强大的魔法杖,编写出能够守护你代码安全的第一道防护咒语。让我们一起开启这场魔法之旅吧!
|
2天前
|
机器学习/深度学习 数据可视化 数据挖掘
深入浅出:使用Python进行数据分析的入门指南
【9月更文挑战第11天】本文旨在为初学者提供一条清晰的道路,通过Python探索数据科学的奇妙世界。我们将从基础语法讲起,逐步深入到数据处理、可视化以及机器学习等高级话题。文章不仅分享理论知识,还将通过实际代码示例,展示如何应用这些知识解决实际问题。无论你是编程新手,还是希望扩展技能的数据分析师,这篇文章都将是你宝贵的资源。
|
4天前
|
测试技术 持续交付 Apache
Python性能测试新风尚:JMeter遇上Locust,性能分析不再难🧐
【9月更文挑战第10天】随着软件应用的不断扩展,性能测试成为确保系统稳定运行的关键环节。本文通过对比Apache JMeter和Locust,探讨了如何在Python环境中利用这两款工具挖掘更多性能测试潜力。JMeter是一款成熟且功能强大的开源工具,支持多种协议,适用于各种应用的测试;而Locust则基于Python,通过简单脚本模拟HTTP请求,更适合Web应用测试。
13 2
|
7天前
|
数据采集 机器学习/深度学习 存储
Python编程入门:从基础到实战
【9月更文挑战第6天】本文将引导你走进Python的世界,从零基础开始,逐步掌握Python的基础语法和常用库。我们将通过实例讲解,让你在轻松愉快的氛围中学习Python编程。最后,我们还将分享一些实用的技巧和资源,帮助你在学习过程中不断进步。让我们一起开启Python编程之旅吧!
26 4

热门文章

最新文章