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