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 数据库增加了两个系统表:
MySQL 9.0 扩展了预编译语句的功能,增加了对事件 DDL 命令的支持,包括 CREATE EVENT、ALTER EVENT 以及 DROP EVENT。例如:
delimiter |
CREATE PROCEDURE sp(n INT)
BEGIN
SET @s1 = "CREATE EVENT e ON SCHEDULE EVERY ";
SET @s2 = " SECOND
STARTS CURRENT_TIMESTAMP + INTERVAL 10 SECOND
ENDS CURRENT_TIMESTAMP + INTERVAL 2 MINUTE
ON COMPLETION PRESERVE
DO
INSERT 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 9.0 删除了 mysql_native_password 认证插件功能,该功能在 MySQL 8.0 中已经被弃用。新版本不再接受旧版本客户端程序的 mysql_native 认证请求,这样做是为了增加安全性。
该变更同时导致以下服务器选项和变量被删除:
为了兼容早期版本,MySQL 9.0 客户端仍然保留了 mysql_native_password,因此它可以连接低版本的 MySQL 服务器。不过,MySQL 9.0 客户端需要在运行时加载 mysql_native_password。
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 以及客户端工具。