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_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
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
% 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「集計関数」を参照してください。