このページは機械翻訳したものです。
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_QUOTESSQL モードが有効な場合、文字列は'でのみ囲むことができ、サーバーは"で囲まれた文字列を識別子として解釈します。\は文字列内のエスケープ文字です。SQL ステートメントでは、
db_name.tbl_name構文を使用して、さまざまなデータベースのテーブルにアクセスできます。 同様の機能を備えた SQL サーバーもありますが、これはUser spaceと呼ばれます。 MySQL Server は、CREATE TABLE ralph.my_table ... IN my_tablespaceなど、ステートメントで使用されるようなテーブルスペースをサポートしません。
-
SQL ステートメント構文
ANALYZE TABLE、CHECK TABLE、OPTIMIZE TABLE、およびREPAIR TABLEステートメント。CREATE DATABASE、DROP DATABASE、およびALTER DATABASEステートメント。 セクション13.1.12「CREATE DATABASE ステートメント」、セクション13.1.24「DROP DATABASE ステートメント」、およびセクション13.1.2「ALTER DATABASE ステートメント」を参照してください。DOステートメント。クエリーオプティマイザによるテーブルの処理方法に関する説明を取得する
EXPLAIN SELECT。FLUSHおよびRESETステートメント。SETステートメント。 セクション13.7.6.1「変数代入の SET 構文」を参照してください。SHOWステートメント。 セクション13.7.7「SHOW ステートメント」を参照してください。 MySQL 固有のSHOWステートメントの多くによって生成される情報は、SELECTを使用してINFORMATION_SCHEMAをクエリーすることによって、より標準的な方法で取得できます。 第26章「INFORMATION_SCHEMA テーブル」を参照してください。LOAD DATAの使用。 多くの場合、この構文は OracleLOAD DATAと互換性があります。 セクション13.2.7「LOAD DATA ステートメント」を参照してください。RENAME TABLEの使用。 セクション13.1.36「RENAME TABLE ステートメント」を参照してください。DELETE+INSERTの代わりとしてのREPLACEの使用。 セクション13.2.9「REPLACE ステートメント」を参照してください。ALTER TABLEステートメントにおけるCHANGE、col_nameDROP、あるいはcol_nameDROP INDEX、IGNOREまたはRENAMEの使用。ALTER TABLEステートメントにおける、複数のADD、ALTER、DROP、またはCHANGE句の使用。 セクション13.1.9「ALTER TABLE ステートメント」を参照してください。インデックス名の使用、カラムのプリフィクス上のインデックス、および
CREATE TABLEステートメントでのINDEXまたはKEYの使用。 セクション13.1.20「CREATE TABLE ステートメント」を参照してください。CREATE TABLEを用いたTEMPORARYまたはIF NOT EXISTSの使用。DROP TABLEおよびDROP DATABASEを用いたIF EXISTSの使用。1 つの
DROP TABLEステートメントで複数のテーブルを破棄できる機能。UPDATEおよびDELETEステートメントのORDER BYおよびLIMIT句。INSERT INTO構文。tbl_nameSETcol_name= ...INSERTおよびREPLACEステートメントのDELAYED句。INSERT、REPLACE、DELETE、およびUPDATEステートメントのLOW_PRIORITY句。SELECTステートメントにおけるINTO OUTFILEまたはINTO DUMPFILEの使用。 セクション13.2.10「SELECT ステートメント」を参照してください。SELECTステートメントにおけるSTRAIGHT_JOINやSQL_SMALL_RESULTなどのオプション。GROUP BY句で、選択したすべてのカラムの名前を列挙する必要はありません。 これにより、ごく一部ではありますが、きわめて一般的なクエリーのパフォーマンスが向上します。 セクション12.20「集計関数」を参照してください。ORDER BYを用いるだけでなくGROUP BYを用いても、ASCおよびDESCを指定できます。:=割り当て演算子で、ステートメント内の変数を設定する機能。 セクション9.4「ユーザー定義変数」を参照してください。
-
データ型
MEDIUMINT、SET、およびENUMデータ型と、さまざまなBLOBおよびTEXTデータ型。AUTO_INCREMENT、BINARY、NULL、UNSIGNED、および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の左側) の式で、=、<>、<=、<、>=、>、<<、>>、<=>、AND、OR、または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「集計関数」を参照してください。