MySQL 8.0 リファレンスマニュアル MySQL NDB Cluster 8.0 を含む
このページは機械翻訳したものです。
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 の使用。 多くの場合、この構文は Oracle LOAD 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_name SET col_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「集計関数」を参照してください。