MySQL 9.0正式版本来了!

admin2024-07-03  31

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)
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-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 以及客户端工具。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明原文出处。如若内容造成侵权/违法违规/事实不符,请联系SD编程学习网:675289112@qq.com进行投诉反馈,一经查实,立即删除!