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

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
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月前
|
安全 测试技术 网络安全
如何在Python Web开发中进行安全测试?
如何在Python Web开发中进行安全测试?
|
1月前
|
安全 关系型数据库 测试技术
学习Python Web开发的安全测试需要具备哪些知识?
学习Python Web开发的安全测试需要具备哪些知识?
34 4
|
7天前
|
IDE 测试技术 开发工具
10个必备Python调试技巧:从pdb到单元测试的开发效率提升指南
在Python开发中,调试是提升效率的关键技能。本文总结了10个实用的调试方法,涵盖内置调试器pdb、breakpoint()函数、断言机制、logging模块、列表推导式优化、IPython调试、警告机制、IDE调试工具、inspect模块和单元测试框架的应用。通过这些技巧,开发者可以更高效地定位和解决问题,提高代码质量。
82 8
10个必备Python调试技巧:从pdb到单元测试的开发效率提升指南
|
14天前
|
存储 JavaScript 前端开发
JavaScript中的数据类型以及存储上的差别
通过本文的介绍,希望您能够深入理解JavaScript中的数据类型及其存储差别,并在实际编程中灵活运用这些知识,以提高代码的性能和稳定性。
44 3
|
1月前
|
Java 测试技术 持续交付
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
本文重点讲解如何搭建App自动化测试框架的思路,而非完整源码。主要内容包括实现目的、框架设计、环境依赖和框架的主要组成部分。适用于初学者,旨在帮助其快速掌握App自动化测试的基本技能。文中详细介绍了从需求分析到技术栈选择,再到具体模块的封装与实现,包括登录、截图、日志、测试报告和邮件服务等。同时提供了运行效果的展示,便于理解和实践。
116 4
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
|
26天前
|
敏捷开发 测试技术 持续交付
自动化测试之美:从零开始搭建你的Python测试框架
在软件开发的马拉松赛道上,自动化测试是那个能让你保持节奏、避免跌宕起伏的神奇小助手。本文将带你走进自动化测试的世界,用Python这把钥匙,解锁高效、可靠的测试框架之门。你将学会如何步步为营,构建属于自己的测试庇护所,让代码质量成为晨跑时清新的空气,而不是雾霾中的忧虑。让我们一起摆脱手动测试的繁琐枷锁,拥抱自动化带来的自由吧!
|
1月前
|
监控 安全 测试技术
如何在实际项目中应用Python Web开发的安全测试知识?
如何在实际项目中应用Python Web开发的安全测试知识?
32 4
|
1月前
|
Java 测试技术 Android开发
探索自动化测试的奥秘:从入门到精通
【10月更文挑战第37天】本文将带你进入自动化测试的世界,从基础知识到实战案例,逐步揭示自动化测试的神秘面纱。我们将一起探讨如何利用代码来简化测试过程,提高效率,并确保软件质量。无论你是初学者还是有经验的开发者,这篇文章都能为你提供有价值的见解和技巧。让我们一起踏上这段探索之旅吧!
|
1月前
|
域名解析 网络协议 测试技术
IP、掩码、网关、DNS1、DNS2到底是什么东西,ping telnet测试
理解IP地址、子网掩码、默认网关和DNS服务器的概念是有效管理和配置网络的基础。通过使用ping和telnet命令,可以测试网络连通性和服务状态,快速诊断和解决网络问题。这些工具和概念是网络管理员和IT专业人员日常工作中不可或缺的部分。希望本文提供的详细解释和示例能够帮助您更好地理解和应用这些网络配置和测试工具。
130 2
|
1月前
|
JavaScript 前端开发
利用事件循环提高 JavaScript 程序的性能
本文介绍了事件循环在JavaScript中的工作原理,以及如何通过合理利用事件循环来优化程序性能,包括异步操作、任务优先级和避免阻塞等技巧。