概要
MySQL 8.4以降のMySQL 9.0で追加、非推奨、変更、削除された内容まとめです。
MySQL 9.0に追加された機能は以下の通りです。
JavaScriptストアドプログラム
MySQL Enterprise Editionに、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$ ;
JavaScriptで書かれたストアドプロシージャとストアド関数の両方がサポートされており、多言語エンジンコンポーネント(MLE)によって提供されています。
MySQLのJavaScript言語サポートはECMAScript 2023仕様に準拠しており、デフォルトでStrictモードを使用します。この実装には、Object
、Function
、Math
、Date
、String
などの標準ECMAScriptライブラリオブジェクトがすべて含まれています。
VECTORタイプのサポート
MySQL 9.0はVECTOR
カラムタイプをサポートしています。ベクトルは、バイナリ文字列値またはリスト形式の文字列として表現できる、エントリ(4バイト浮動小数点値)のリストで構成されるデータ構造です。
VECTOR
カラムは以下のようにCREATE TABLE
を使用して作成できます。
mysql> CREATE TABLE v1 (c1 VECTOR(5000));
Query OK, 0 rows affected (0.03 sec)
ベクトルカラムにはいくつかの制限があります
-
VECTOR
カラムはどのタイプのキーとしても使用できません。 - 一部のMySQL関数と演算子はベクトルを引数として受け付けません。
インラインおよび暗黙的な外部キー制約
MySQLは現在、以前はパーサーに受け入れられていたものの無視されていたインライン外部キー指定を強制します。MySQL 9.0は親テーブルの主キー列への暗黙的な参照も受け入れます。
EXPLAIN ANALYZE INTO のJSON出力の保存
EXPLAIN ANALYZE
のJSON出力をユーザー変数に保存するサポートが追加されました。
EXPLAIN ANALYZE FORMAT=JSON INTO @variable select_stmt
イベントDDLのプリペアドステートメント
MySQL 9.0.0以降、以下のステートメントを準備できるようになりました。
- CREATE EVENT
- ALTER EVENT
- DROP EVENT
パフォーマンススキーマのシステム変数テーブル
MySQL 9.0では、サーバーシステム変数に関する情報を提供する2つの新しいテーブルがパフォーマンススキーマに追加されました。
-
variables_metadata
テーブル -
global_variable_attributes
テーブル
EXPLAIN FORMAT=JSON の拡張
EXPLAIN FORMAT=JSON
の出力に、結合列に関する情報が含まれるようになりました。
LIMIT 1 を含む相関サブクエリ
以前は、派生テーブルを持つ外部左結合に変換される資格を得るために、サブクエリにLIMIT
句を含めることはできませんでした。MySQL 9.0では、この制限が若干緩和され、LIMIT 1
を含むサブクエリを変換できるようになりました。
以下の機能はMySQL 9.0で非推奨となり、将来のシリーズで削除される可能性があります。
- パフォーマンススキーマの
variables_info
テーブルの列 - トランザクショナルおよび非トランザクショナルテーブルを更新するトランザクション
以下の項目は廃止され、MySQL 9.0で削除されました。
-
mysql_native_password
プラグイン
この変更に伴い、以下のサーバーオプションと変数も削除されました。
-
--mysql-native-password
サーバーオプション -
--mysql-native-password-proxy-users
サーバーオプション -
default_authentication_plugin
サーバーシステム変数
下位互換性のため、mysql_native_password
はクライアント側では引き続き利用可能です。これにより、MySQL 9.0のクライアントプログラムが以前のバージョンのMySQLサーバーに接続できるようになっています。MySQL 9.0では、以前のリリースのクライアントプログラムに組み込まれていたMySQLネイティブ認証プラグインが、実行時にロードする必要があるプラグインに変換されました。
参考