MySQL サーバには、他の SQL
データベースにはない拡張機能があります。それらの拡張機能を使用した場合、他の
SQL
サーバにコードを移植できなくなるので注意してください。場合によっては、MySQL
拡張機能を含むコードを記述しても、/*!
... */
形式のコメントを使用することで移植することができます。その場合、MySQL
サーバでは、他の MySQL
ステートメントと同様にコメント内のコードが解析および実行されますが、他の
SQL
サーバでは拡張機能が無視されます。次に例を示します。
SELECT /*! STRAIGHT_JOIN */ col_name FROM table1,table2 WHERE ...
'!'
の後ろにバージョン番号を追加すると、MySQL
バージョンが、使用されているバージョン番号以降の場合にのみ、構文が実行されます。
CREATE /*!32302 TEMPORARY */ TABLE t (a INT);
つまり、バージョン 3.23.02
以降を使用している場合、MySQL サーバで
TEMPORARY
キーワードが使用されます。
以下は、MySQL 拡張機能の一覧です。
フィールド型
MEDIUMINT
、SET
、ENUM
、およびさまざまな
BLOB
および TEXT
型。
フィールド属性
AUTO_INCREMENT
、BINARY
、NULL
、UNSIGNED
、および
ZEROFILL
。
すべての文字列比較は、デフォルトでは大文字と小文字を区別せず、現在のキャラクタセット(デフォルトでは
ISO-8859-1
Latin1)で決められたソート順で行われる。これを変更するには、BINARY
属性を指定してカラムを宣言するか、BINARY
キャストを使用して、MySQL
サーバホストで使用される ASCII
の順序に従って比較が行われるようにする必要がある。
MySQL サーバでは、各データベースは MySQL データディレクトリ下のディレクトリに、データベース内のテーブルはデータベースディレクトリ内のファイル名にマップされる。
これには、次のような意味がある。
ほとんどの Unix システムのようにファイル名で大文字と小文字が区別されるオペレーティングシステム上の MySQL サーバでは、データベース名およびテーブル名は大文字と小文字を区別する。 See 項6.1.3. 「名前におけるケース依存」。
データベース名、テーブル名、インデックス名、カラム名、またはエイリアス名を数字で始めることができる(ただし、数字のみから成る名前を使用することはできない)。
標準のシステムコマンドを使用して、テーブルのバックアップ、名前の変更、移動、削除、およびコピーを行うことができる。たとえば、テーブルの名前を変更するには、テーブルに対応する
.MYD
、.MYI
、および
.frm
ファイルの名前を変更する。
SQL
ステートメントで、db_name.tbl_name
構文を使用して、さまざまなデータベース内のテーブルにアクセスすることができる。同様の機能を備えた
SQL
サーバもあるが、これはユーザスペース
と呼ばれる。MySQL
サーバでは、CREATE TABLE ralph.my_table...IN
my_tablespace
のようなテーブルスペースはサポートされない。
数値カラムで LIKE
を使用することができる。
SELECT
ステートメントでの
INTO OUTFILE
および
STRAIGHT_JOIN
の使用。 See
項6.4.1. 「SELECT
構文」。
SELECT
ステートメントでの
SQL_SMALL_RESULT
オプション。
テーブルの結合方法に関する説明を取得する
EXPLAIN SELECT
。
インデックス名、フィールドのプリフィックス上のインデックス、および
CREATE TABLE
ステートメントでの
INDEX
または KEY
の使用。 See 項6.5.3. 「CREATE TABLE
構文」。
CREATE TABLE
での
TEMPORARY
または IF NOT
EXISTS
の使用。
list
に複数の要素がある
COUNT(DISTINCT list)
の使用。
ALTER TABLE
ステートメントでの
CHANGE col_name
、DROP
col_name
、DROP
INDEX
、IGNORE
、または
RENAME
の使用。 See
項6.5.4. 「ALTER TABLE
構文」。
RENAME TABLE
の使用。 See
項6.5.5. 「RENAME TABLE
構文」。
ALTER TABLE
ステートメントでの複数の
ADD
、ALTER
、DROP
、または
CHANGE
節の使用。
DROP TABLE
でのキーワード
IF EXISTS
の使用。
1 つの DROP TABLE
ステートメントで複数のテーブルを破棄することができる。
UPDATE
および
DELETE
ステートメントの
ORDER BY
および
LIMIT
節。
INSERT INTO ... SET col_name = ...
構文。
INSERT
および
REPLACE
ステートメントの
DELAYED
節。
INSERT
、REPLACE
、DELETE
、および
UPDATE
ステートメントの
LOW_PRIORITY
節。
LOAD DATA INFILE
の使用。多くの場合、この構文は Oracle の
LOAD DATA INFILE
と互換性がある。
See 項6.4.8. 「LOAD DATA INFILE
構文」。
ANALYZE TABLE
、CHECK
TABLE
、OPTIMIZE
TABLE
、および REPAIR TABLE
ステートメント。
SHOW
ステートメント。 See
項4.6.8. 「SHOW
構文」。
‘'
’
だけでなく、‘"
’
または ‘'
’
で文字列を囲むことができる。
エスケープ文字 ‘\
’
の使用。
SET
ステートメント。 See
項5.5.6. 「SET
構文」。
GROUP BY
部で、選択したすべてのカラムの名前を列挙する必要がない。これにより、ごく一部ではあるが、きわめて一般的なクエリのパフォーマンスが向上する。
See 項6.3.7. 「GROUP BY
節で使用する関数と修飾子」。
GROUP BY
で ASC
および DESC
を指定することができる。
他の SQL 環境を使用していたユーザにわかりやすいように、MySQL サーバでは多数の関数のエイリアスがサポートされている。たとえば、すべての文字列関数で、標準の SQL 構文と ODBC 構文の両方がサポートされている。
MySQL サーバでは、C
プログラミング言語のように、||
および &&
演算子が論理
OR および AND を意味すると解釈される。MySQL
サーバでは、||
と
OR
、および
&&
と AND
はシノニムである。このすぐれた構文のために、MySQL
サーバでは、文字列の連結に標準 SQL-99 の
||
演算子を使用することができない。代わりに、CONCAT()
を使用する。CONCAT()
には引数をいくつでも使用できるので、||
演算子の使用を MySQL
サーバに変換するのは簡単である。
CREATE DATABASE
または DROP
DATABASE
。 See
項6.5.1. 「CREATE DATABASE
構文」。
%
演算子は MOD()
のシノニムである。したがって、N %
M
は MOD(N,M)
と同じである。%
は、C
プログラマを対象として、また PostgreSQL
との互換性を確保するためにサポートされている。
=
、<>
、<=
、<
、>=
、>
、<<
、>>
、<=>
、AND
、OR
、または
LIKE
演算子を、SELECT
ステートメントの FROM
の左側のカラム比較で使用することができる。次に例を示す。
mysql> SELECT col1=1 AND col2=2 FROM tbl_name;
LAST_INSERT_ID()
関数。 See
項11.1.3.32. 「mysql_insert_id()
」。
REGEXP
および NOT
REGEXP
拡張正規表現演算子。
1 つまたは複数の引数を使用する
CONCAT()
または
CHAR()
(MySQL
サーバでは、これらの関数は引数をいくつでも使用することができる)。
BIT_COUNT()
、CASE
、ELT()
、FROM_DAYS()
、FORMAT()
、IF()
、PASSWORD()
、ENCRYPT()
、MD5()
、ENCODE()
、DECODE()
、PERIOD_ADD()
、PERIOD_DIFF()
、TO_DAYS()
、または
WEEKDAY()
関数。
部分文字列を削除する TRIM()
の使用。SQL-99 では、1
つの文字しか削除できない。
GROUP BY
関数
STD()
、BIT_OR()
、BIT_AND()
、BIT_XOR()
、および
GROUP_CONCAT()
。 See
項6.3.7. 「GROUP BY
節で使用する関数と修飾子」。
DELETE
+ INSERT
の代わりの REPLACE
の使用。 See
項6.4.7. 「REPLACE
構文」。
FLUSH
、RESET
、および
DO
ステートメント。
次のように、:=
を使用してステートメント内で変数を設定することができる。
SELECT @a:=SUM(total),@b=COUNT(*),@a/@b AS avg FROM test_table; SELECT @t1:=(@t2:=1)+@t3:=4,@t1,@t2,@t3;
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.