MySQL 8.0 リファレンスマニュアル


MySQL 8.0 リファレンスマニュアル  /  ...  /  標準 SQL に対する MySQL 拡張機能

1.7.1 標準 SQL に対する MySQL 拡張機能

MySQL Server では、他の SQL DBMS で検出されない可能性のある拡張機能がサポートされています。 これらを使用する場合は、コードが他の SQL サーバーに移植できない可能性があることを警告してください。 場合によっては、MySQL 拡張機能を含むコードを記述しても、次の形式のコメントを使用することで移植することができます。

/*! MySQL-specific code */

この場合、MySQL Server は他の SQL ステートメントと同様にコメント内のコードを解析して実行しますが、他の SQL サーバーは拡張を無視する必要があります。 たとえば、MySQL Server は次のステートメントの STRAIGHT_JOIN キーワードを認識しますが、他のサーバーは認識できません:

SELECT /*! STRAIGHT_JOIN */ col1 FROM table1,table2 WHERE ...

!文字のあとにバージョン番号を追加すると、コメント内の構文は、MySQL のバージョンが指定されたバージョン番号以上の場合にだけ実行されます。 次のコメントの KEY_BLOCK_SIZE 句は、MySQL 5.1.10 以上のサーバーによってのみ実行されます:

CREATE TABLE t1(a INT, KEY (a)) /*!50110 KEY_BLOCK_SIZE=1024 */;

次の説明は、MySQL 拡張機能をカテゴリでまとめた一覧です。

  • ディスク上のデータの構成

    MySQL Server は、各データベースを MySQL データディレクトリ下のディレクトリにマップし、データベース内のテーブルをデータベースディレクトリ内のファイル名にマップします。 したがって、大/小文字が区別されるファイル名 (ほとんどの Unix システムなど) を持つオペレーティングシステム上の MySQL Server では、データベース名とテーブル名は大/小文字が区別されます。 セクション9.2.3「識別子の大文字と小文字の区別」を参照してください。

  • 一般言語構文

    • デフォルトでは、文字列は"および'で囲むことができます。 ANSI_QUOTES SQL モードが有効な場合、文字列は'でのみ囲むことができ、サーバーは"で囲まれた文字列を識別子として解釈します。

    • \は文字列内のエスケープ文字です。

    • SQL ステートメントでは、db_name.tbl_name 構文を使用して、さまざまなデータベースのテーブルにアクセスできます。 同様の機能を備えた SQL サーバーもありますが、これは User space と呼ばれます。 MySQL Server は、CREATE TABLE ralph.my_table ... IN my_tablespace など、ステートメントで使用されるようなテーブルスペースをサポートしません。

  • SQL ステートメント構文

  • データ型

    • MEDIUMINTSET、および ENUM データ型と、さまざまな BLOB および TEXT データ型。

    • AUTO_INCREMENTBINARYNULLUNSIGNED、および ZEROFILL データ型の属性。

  • 関数と演算子

    • ほかの SQL 環境を使用していたユーザーにわかりやすいように、MySQL Server では多数の関数のエイリアスがサポートされています。 たとえば、すべての文字列関数で、標準の SQL 構文と ODBC 構文の両方がサポートされています。

    • MySQL Server は、|| および && 演算子が、C プログラミング言語の場合と同様に論理 OR および AND を意味することを理解しています。 MySQL Server では、||OR はシノニムであり、&&AND も同様です。 この優れた構文のために、MySQL Server では、文字列の連結に標準 SQL の || 演算子を使用することができません。その代わりに、CONCAT() を使用します。 CONCAT() は任意の数の引数を取るため、|| 演算子の使用を MySQL Server に変換することは簡単です。

    • value_list に複数の要素がある場合の、COUNT(DISTINCT value_list) の使用。

    • デフォルトでは、文字列比較では大/小文字は区別されず、ソート順序は現在の文字セット (デフォルトでは utf8mb4) の照合順序によって決定されます。 かわりに、大/小文字を区別する比較を実行するには、BINARY 属性を使用してカラムを宣言するか、BINARY キャストを使用する必要があります。これにより、字句の順序付けではなく、基礎となる文字コード値を使用して比較が実行されます。

    • % 演算子は MOD() のシノニムです。 つまり、N % MMOD(N,M) と同等です。% は、C プログラマと、PostgreSQL との互換性のためにサポートされています。

    • SELECT ステートメントの出力カラムリスト (FROM の左側) の式で、=<><=<>=><<>><=>ANDOR、または LIKE 演算子を使用できます。 例:

      mysql> SELECT col1=1 AND col2=2 FROM my_table;
    • LAST_INSERT_ID() 関数は、最新の AUTO_INCREMENT 値を返します。 セクション12.16「情報関数」を参照してください。

    • LIKE は、数値に対して使用できます。

    • REGEXP および NOT REGEXP 拡張正規表現演算子。

    • 1 つまたは複数の引数を使用する CONCAT() または CHAR()。 (MySQL Server では、これらの関数は引数をいくつでも使用することができます。)

    • BIT_COUNT(), CASE, ELT(), FROM_DAYS(), FORMAT(), IF(), MD5(), PERIOD_ADD(), PERIOD_DIFF(), TO_DAYS() および WEEKDAY() の機能。

    • 部分文字列を削除する TRIM() の使用。 標準 SQL では、1 つの文字しか削除できません。

    • GROUP BY 関数 STD()BIT_OR()BIT_AND()BIT_XOR()、および GROUP_CONCAT()セクション12.20「集計関数」を参照してください。


関連キーワード:  ステートメント, TABLE, セクション, 参照, Server, 標準, 関数, 構文, サーバー, テーブル