本節總結了自 MySQL 8.4 以來,MySQL 9.0 中新增、棄用、變更和移除的功能。相關章節列出了 MySQL 伺服器選項和變數,這些選項和變數已在 MySQL 9.0 中新增、棄用或移除;請參閱 第 1.5 節,「自 8.4 以來,MySQL 9.0 中新增、棄用或移除的伺服器與狀態變數和選項」。
以下功能已新增至 MySQL 9.0
JavaScript 儲存程式。 MySQL 企業版現在包含對以 JavaScript 編寫的儲存程式的支援,例如使用
CREATE FUNCTION
陳述式和此處顯示的 JavaScript 程式碼建立的簡單範例CREATE FUNCTION gcd(a INT, b INT) RETURNS INT NO SQL LANGUAGE JAVASCRIPT AS $mle$ let x = Math.abs(a) let y = Math.abs(b) while(y) { var t = y y = x % y x = t } return x $mle$ ;
請參閱 第 27.3.1 節,「JavaScript 儲存程式的建立與管理」,其中說明了 JavaScript 儲存程式的建立和執行的基本知識。
支援以 JavaScript 編寫的儲存程序和儲存函數,並由多語系引擎元件 (MLE) 提供。有關判斷您的發行版本是否包含此元件以及啟用它的詳細資訊,請參閱 第 7.5.6 節,「多語系引擎元件 (MLE)」。
MySQL 中的 JavaScript 語言支援符合 ECMAScript 2023 規格,且預設使用嚴格模式。嚴格模式無法停用。此實作包含所有標準 ECMAScript 程式庫物件,例如
Object
、Function
、Math
、Date
、String
等。console.log()
和console.error()
也支援 (請參閱 第 27.3.9 節,「JavaScript 儲存程式範例」)。大多數 MySQL 資料類型都支援用於 JavaScript 儲存程式輸入和輸出引數,以及傳回資料類型。字串必須使用
utf8mb4
字元集。支援 MySQLBLOB
和TEXT
類型,以及許多 MySQL 時間類型。也支援JSON
。VECTOR
類型不受 MLE 元件或 JavaScript 儲存程式支援。如需詳細資訊,請參閱 第 27.3.4 節,「JavaScript 儲存程式資料類型與引數處理」,以及 第 27.3.8 節,「JavaScript 儲存程式限制與約束」。以 JavaScript 編寫的儲存程式支援一個 API,用於執行和擷取 SQL 陳述式的結果,該 API 由 MLE 元件提供。如需詳細資訊,請參閱 第 27.3.6 節,「JavaScript SQL API」,以及 第 27.3.7 節,「使用 JavaScript SQL API」。JavaScript 儲存程式也支援預備陳述式;請參閱 第 27.3.7.2 節,「預備陳述式」。
MLE 元件提供許多工作階段資訊和管理功能,包括
mle_session_state()
和mle_session_reset()
。第 7.5.6.1 節,「MLE 元件選項和變數參考」,以及 第 7.5.6.2 節,「MLE 元件狀態與工作階段資訊」,提供有關 MLE 組態選項和狀態變數的資訊;另請參閱 第 27.3.5 節,「JavaScript 儲存程式—工作階段資訊與選項」。如需有關 JavaScript 儲存程式的一般資訊,請參閱 第 27.3 節,「JavaScript 儲存程式」。
VECTOR 類型支援。 MySQL 9.0 支援
VECTOR
資料行類型。向量是一種資料結構,由一個項目清單 (4 位元組浮點值) 組成,可以表示為二進位字串值或清單格式的字串。VECTOR
資料行的宣告具有最大長度或項目數 (括號中);預設值為 2048,最大值為 16383。您可以使用
CREATE TABLE
建立具有VECTOR
資料行的InnoDB
資料表,如下所示mysql> CREATE TABLE v1 (c1 VECTOR(5000)); Query OK, 0 rows affected (0.03 sec)
向量資料行受到限制,其中一些限制在此處列出
VECTOR
資料行不能用作任何類型的索引鍵。這包括主索引鍵、外索引鍵、唯一索引鍵和分割索引鍵。某些類型的 MySQL 函數和運算子不接受向量作為引數。這些包括但不限於數值函數和運算子、時間函數、全文檢索函數、XML 函數、位元函數和 JSON 函數。
向量可以與某些但不是全部字串和加密函數一起使用。有關這些函數的更完整資訊,請參閱 支援和不支援的 VECTOR 函數。
VECTOR
無法與任何其他類型進行比較,並且只能與另一個VECTOR
進行相等性比較。目前
NDB
資料表不支援VECTOR
資料行。
VECTOR_DIM()
(也在 MySQL 9.0 中新增) 會傳回向量的長度。提供函數以在表示法之間轉換。STRING_TO_VECTOR()
(別名:TO_VECTOR()
) 採用向量的清單格式表示法,並傳回二進位字串表示法;VECTOR_TO_STRING()
(別名:FROM_VECTOR()
) 執行反向操作,如下所示mysql> SELECT STRING_TO_VECTOR('[2, 3, 5, 7]'); +------------------------------------------------------+ | TO_VECTOR('[2, 3, 5, 7]') | +------------------------------------------------------+ | 0x00000040000040400000A0400000E040 | +------------------------------------------------------+ 1 row in set (0.00 sec) mysql> SELECT VECTOR_TO_STRING(0x00000040000040400000A0400000E040); +------------------------------------------------------+ | VECTOR_TO_STRING(0x00000040000040400000A0400000E040) | +------------------------------------------------------+ | [2.00000e+00,3.00000e+00,5.00000e+00,7.00000e+00] | +------------------------------------------------------+ 1 row in set (0.00 sec)
如需詳細資訊和範例,請參閱 第 13.3.5 節,「VECTOR 類型」,以及 第 14.21 節,「向量函數」。
內嵌和隱式外索引鍵約束。 MySQL 現在強制執行內嵌外索引鍵規格,這些規格先前被剖析器接受,但被忽略。MySQL 9.0 也接受對父資料表主索引鍵資料行的隱式參考。
考慮由以下陳述式建立的父資料表
person
CREATE TABLE person ( id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, name CHAR(60) NOT NULL );
若要建立在
person
上具有外索引鍵owner
的資料表shirt
,MySQL 現在會根據標準接受並正確處理此處顯示的任何CREATE TABLE
陳述式CREATE TABLE shirt ( id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, style ENUM('tee', 'polo', 'dress') NOT NULL, color ENUM('red', 'blue', 'yellow', 'white', 'black') NOT NULL, owner SMALLINT UNSIGNED NOT NULL, FOREIGN KEY (owner) REFERENCES person (id) ); CREATE TABLE shirt ( id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, style ENUM('tee', 'polo', 'dress') NOT NULL, color ENUM('red', 'blue', 'yellow', 'white', 'black') NOT NULL, owner SMALLINT UNSIGNED NOT NULL, FOREIGN KEY (owner) REFERENCES person ); CREATE TABLE shirt ( id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, style ENUM('tee', 'polo', 'dress') NOT NULL, color ENUM('red', 'blue', 'yellow', 'white', 'black') NOT NULL, owner SMALLINT UNSIGNED NOT NULL REFERENCES person (id) ); CREATE TABLE shirt ( id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, style ENUM('tee', 'polo', 'dress') NOT NULL, color ENUM('red', 'blue', 'yellow', 'white', 'black') NOT NULL, owner SMALLINT UNSIGNED NOT NULL REFERENCES person );
在先前的 MySQL 版本中,只有剛才顯示的語句中的第一條語句具有建立外鍵的效果。
更多資訊,請參閱第 15.1.20.5 節「外鍵約束」。
儲存來自 EXPLAIN ANALYZE INTO 的 JSON 輸出。 現在支援使用此處顯示的語法,將來自
EXPLAIN ANALYZE
的JSON
輸出儲存到使用者變數中。EXPLAIN ANALYZE FORMAT=JSON INTO @variable select_stmt
該變數隨後可用作任何 MySQL JSON 函數的 JSON 引數(請參閱第 14.17 節「JSON 函數」)。
INTO
子句僅在FORMAT=JSON
時支援;必須明確指定FORMAT
。此形式的EXPLAIN ANALYZE
也支援選用的FOR SCHEMA
或FOR DATABASE
子句。注意只有在將伺服器系統變數
explain_json_format_version
設定為2
時,此功能才可用;否則,嘗試使用它會引發ER_EXPLAIN_ANALYZE_JSON_FORMAT_VERSION_NOT_SUPPORTED
錯誤(EXPLAIN ANALYZE 不支援 explain_json_format_version=1 時的 FORMAT=JSON)。有關其他資訊和範例,請參閱取得執行計畫資訊。
預備語句中的事件 DDL。從 MySQL 9.0.0 開始,可以預備以下語句:
這些語句不支援位置參數(
?
預留位置);您必須從字串文字、系統變數和使用者變數的某種組合中組裝要預備的語句文字。實現可重複使用的方式之一是在預存程序的主體中組裝例如CREATE EVENT
語句的文字,將語句的任何可變部分作為IN
參數傳遞給預存程序;使用PREPARE
預備組裝的文字;使用所需的參數值叫用程序。有關更多資訊,請參閱 PREPARE、EXECUTE 和 DEALLOCATE PREPARE 語句以及預備語句中允許的 SQL 語法。有關範例,請參閱第 15.1.13 節「CREATE EVENT 語句」。效能架構系統變數表。MySQL 9.0 在效能架構中新增了兩個新表,提供有關伺服器系統變數的資訊。這些表在此處列出:
variables_metadata
表提供有關系統變數的一般資訊。此資訊包括 MySQL 伺服器識別的每個系統變數的名稱、範圍、類型、範圍(如果適用)和說明。此表中的兩個欄位(
MIN_VALUE
和MAX_VALUE
)旨在取代variables_info
表中已棄用的欄位。global_variable_attributes
表提供有關伺服器指派給全域系統變數的屬性-值配對的資訊。
更多資訊,請參閱第 29.12.14 節「效能架構系統變數表」。
以下功能在 MySQL 9.0 中已棄用,並可能在未來的系列中移除。如果顯示替代方案,應更新應用程式以使用它們。
對於使用 MySQL 9.0 中已棄用但在較新 MySQL 版本中已移除的功能的應用程式,當從 MySQL 9.0 來源複製到執行較新版本的複本時,語句可能會失敗,或者可能在來源和複本上產生不同的效果。為了避免這些問題,應修訂使用 9.0 中已棄用功能的應用程式,以避免使用它們並在可能時使用替代方案。
效能架構 variables_info 表欄位。效能架構
variables_info
表的MIN_VALUE
和MAX_VALUE
欄位現在已棄用,並可能在未來的 MySQL 版本中移除。相反地,請使用具有相同名稱的variables_metadata
表的欄位(請參閱MySQL 9.0 中新增或變更的功能)。更新交易式和非交易式表的交易。MySQL 9.0.0 棄用了更新交易式表以及非交易式或不可組合表的交易。現在,這樣的交易會導致將棄用警告寫入到用戶端和錯誤記錄檔。只有
InnoDB
和BLACKHOLE
儲存引擎是交易式且可組合的(NDBCLUSTER
是交易式但不可組合的)。這表示只有此處顯示的儲存引擎組合才會不會引發棄用警告:InnoDB
和BLACKHOLE
MyISAM
和Merge
performance_schema
和任何其他儲存引擎TempTable
和任何其他儲存引擎
更多資訊,請參閱第 19.5.1.36 節「複製和交易」。
以下項目已過時,並已在 MySQL 9.0 中移除。如果顯示替代方案,應更新應用程式以使用它們。
對於使用 MySQL 9.0 中移除的功能的 MySQL 8.4 應用程式,當從 MySQL 8.4 來源複製到 MySQL 9.0 複本時,語句可能會失敗,或者可能在來源和複本上產生不同的效果。為了避免這些問題,應修訂使用 MySQL 9.0 中移除功能的應用程式,以避免使用它們並在可能時使用替代方案。
mysql_native_password 外掛程式。MySQL 8.0 中已棄用的 mysql_native_password 驗證外掛程式已移除。伺服器現在會拒絕來自不具備
CLIENT_PLUGIN_AUTH
功能的舊版用戶端程式的mysql_native
驗證請求。由於此變更,也已移除以下伺服器選項和變數:
--mysql-native-password
伺服器選項--mysql-native-password-proxy-users
伺服器選項default_authentication_plugin
伺服器系統變數
為了回溯相容性,
mysql_native_password
在用戶端上仍然可用,以便 MySQL 9.0 用戶端程式可以連線到較舊版本的 MySQL 伺服器。在 MySQL 9.0 中,內建於先前版本用戶端程式的 MySQL 原生驗證外掛程式已轉換為必須在執行時載入的外掛程式。更多資訊,請參閱第 8.4.1 節「驗證外掛程式」。