MySQL 9.0 第一个正式版本于 2024 年 7 月 1 日发布,这是一个创新版,意味着它会增加一些新功能、修复一些问题并弃用一些旧功能。
性能相关
MySQL 9.0 支持将 EXPLAIN ANALYZE 命令输出的 JSON 数据存储到用户定义的变量中,语法如下:
EXPLAIN ANALYZE FORMAT=JSON
INTO @variable
select_stmt;
只有显式指定了 FORMAT=JSON 时才可以使用 INTO 子句,同时系统变量 explain_json_format_version 必须设置为 2(默认值为 1)时才支持该功能。
MySQL 9.0 还为 performance_schema 数据库增加了两个系统表:
- variables_metadata 提供了关于系统变量的通用信息,包括名称、作用范围、类型、取值范围(可选)以及描述。另外,MIN_VALUE 和 MAX_VALUE 字段用于替换 variables_info 表中的对应字段,后者中的这两个字段将来会被删除。
- global_variable_attributes 提供了全局变量设置的属性和值。
预编译语句
MySQL 9.0 扩展了预编译语句的功能,增加了对事件 DDL 命令的支持,包括 CREATE EVENT、ALTER EVENT 以及 DROP EVENT。例如:
delimiter |CREATE PROCEDURE sp(n INT)
BEGINSET @s1 = "CREATE EVENT e ON SCHEDULE EVERY ";SET @s2 = " SECONDSTARTS CURRENT_TIMESTAMP + INTERVAL 10 SECONDENDS CURRENT_TIMESTAMP + INTERVAL 2 MINUTEON COMPLETION PRESERVEDOINSERT INTO d.t VALUES ROW(NULL, NOW(), FLOOR(RAND()*100))";SET @s = CONCAT(@s1, n, @s2);PREPARE ps FROM @s;EXECUTE ps;DEALLOCATE PREPARE ps;
END |delimiter ;
需要注意的是,事件 DDL 预编译语句不支持位置参数(?占位符),用户需要通过字符串常量、系统变量以及用户变量拼接成动态文本。
向量数据
MySQL 9.0 的一个隐藏大招就是增加了向量(vector)数据类型的支持,例如:
CREATE TABLE t(id int, rgb vector(3));INSERT INTO t VALUES (1, to_vector('[255,255,255]'));SELECT id, from_vector(rgb) FROM t;
id|from_vector(rgb) |
--+-------------------------------------+1|[2.55000e+02,2.55000e+02,2.55000e+02]|
to_vector 函数可以将字符串转化为向量数据,from_vector 函数可以将向量数据转换为字符串。
目前,这个功能在 MySQL 官方文档中没有任何描述,而且只有 vector 数据类型和简单的函数功能,期待后期版本增加更实用的向量数据库功能,例如向量搜索和索引。
MySQL HeatWave 云数据库服务已经提供了向量存储和生成式 AI 功能。
认证安全
MySQL 9.0 删除了 mysql_native_password 认证插件功能,该功能在 MySQL 8.0 中已经被弃用。新版本不再接受旧版本客户端程序的 mysql_native 认证请求,这样做是为了增加安全性。
该变更同时导致以下服务器选项和变量被删除:
- --mysql-native-password 服务器选项;
- --mysql-native-password-proxy-users 服务器选项;
- default_authentication_plugin 服务器系统变量。
为了兼容早期版本,MySQL 9.0 客户端仍然保留了 mysql_native_password,因此它可以连接低版本的 MySQL 服务器。不过,MySQL 9.0 客户端需要在运行时加载 mysql_native_password。
JavaScript存储程序
MySQL 9.0 企业版增加了 JavaScript 存储程序,例如:
CREATE FUNCTION add_nos(arg1 INT, arg2 INT)
RETURNS INT LANGUAGE JAVASCRIPT AS
$$
return arg1 + arg2
$$
;SELECT add_nos(12,52);
+----------------+
| add_nos(12,52) |
+----------------+
| 64 |
+----------------+
JavaScript 存储程序需要安装多语言引擎组件,只有 MySQL 企业版支持这个组件。
其他功能
MySQL 9.0.0 同时修复了 127 个漏洞,具体内容可以参考官方文档。
MySQL 9.0 还发布了最新版本的 MySQL Shell、MySQL Router、MySQL Connectors 以及客户端工具。