このページは機械翻訳したものです。
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 ステートメント構文
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_name
DROP
、あるいはcol_name
DROP 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_name
SETcol_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
%M
MOD(
と同等です。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「集計関数」を参照してください。