2
1

MySQL 8.4以降のMySQL 9.0で追加、非推奨、変更、削除された内容まとめ

Last updated at Posted at 2024-09-20

概要

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モードを使用します。この実装には、ObjectFunctionMathDateStringなどの標準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ネイティブ認証プラグインが、実行時にロードする必要があるプラグインに変換されました。

参考

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1