Documentation Home
MySQL 5.6 リファレンスマニュアル
Download this Manual
PDF (US Ltr) - 26.8Mb
PDF (A4) - 26.9Mb
HTML Download (TGZ) - 7.1Mb
HTML Download (Zip) - 7.2Mb


MySQL 5.6 リファレンスマニュアル  /  ...  /  標準 SQL に対する MySQL 拡張機能

1.7.1 標準 SQL に対する MySQL 拡張機能

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 のバージョンが指定されたバージョン番号以上の場合にだけ実行されます。次のコメント内の TEMPORARY キーワードは MySQL 3.23.02 以降のサーバーでのみ実行されます。

CREATE /*!32302 TEMPORARY */ TABLE t (a INT);

次の説明は、MySQL 拡張機能をカテゴリでまとめた一覧です。

  • ディスク上のデータの構成

    MySQL Server は、各データベースを MySQL データディレクトリ下のディレクトリにマップし、データベース内のテーブルをデータベースディレクトリ内のファイル名にマップします。これには、次のような意味があります。

    • ファイル名で大文字と小文字を区別するオペレーティングシステム (多くの Unix システムなど) 上の MySQL Server では、データベース名とテーブル名で大文字と小文字が区別されます。セクション9.2.2「識別子の大文字と小文字の区別」を参照してください。

    • 標準的なシステムコマンドを使用して、MyISAM ストレージエンジンで管理されるテーブルのバックアップ、名前変更、移動、削除、およびコピーを行うことができます。たとえば、MyISAM テーブルの名前変更を行うには、テーブルに対応する .MYD.MYI、および .frm ファイルの名前を変更します。(ただし、RENAME TABLEALTER TABLE ... RENAME を使用して、サーバーにファイル名を変更させることをお勧めします。)

  • 一般言語構文

    • デフォルトでは、'のほかに"でも文字列を囲むことができます。ANSI_QUOTES SQL モードが有効な場合、文字列を囲むことができるのは'だけであり、サーバーは"で囲まれた文字列を識別子と解釈します。

    • \は文字列内のエスケープ文字です。

    • SQL ステートメントでは、db_name.tbl_name 構文を使用して、さまざまなデータベースのテーブルにアクセスできます。同様の機能を備えた SQL サーバーもありますが、これは User space と呼ばれます。MySQL Server は、CREATE TABLE ralph.my_table ... IN my_tablespace など、ステートメントで使用されるようなテーブルスペースをサポートしません。

  • SQL ステートメント構文

    • ANALYZE TABLECHECK TABLEOPTIMIZE TABLE、および REPAIR TABLE ステートメント。

    • CREATE DATABASEDROP DATABASE、および ALTER DATABASE ステートメント。セクション13.1.10「CREATE DATABASE 構文」セクション13.1.21「DROP DATABASE 構文」、およびセクション13.1.1「ALTER DATABASE 構文」を参照してください。

    • DO ステートメント。

    • クエリーオプティマイザによるテーブルの処理方法に関する説明を取得する EXPLAIN SELECT

    • FLUSH および RESET ステートメント。

    • SET ステートメント。セクション13.7.4「SET 構文」を参照してください。

    • SHOW ステートメント。セクション13.7.5「SHOW 構文」を参照してください。MySQL 固有の SHOW ステートメントの多くによって生成される情報は、SELECT を使用して INFORMATION_SCHEMA をクエリーすることによって、より標準的な方法で取得できます。第21章「INFORMATION_SCHEMA テーブルを参照してください。

    • LOAD DATA INFILE の使用。多くの場合、この構文は Oracle の LOAD DATA INFILE と互換性があります。セクション13.2.6「LOAD DATA INFILE 構文」を参照してください。

    • RENAME TABLE の使用。セクション13.1.32「RENAME TABLE 構文」を参照してください。

    • DELETE + INSERT の代わりとしての REPLACE の使用。セクション13.2.8「REPLACE 構文」を参照してください。

    • ALTER TABLE ステートメントにおける CHANGE col_nameDROP col_name、あるいは DROP INDEXIGNORE または RENAME の使用。ALTER TABLE ステートメントにおける、複数の ADDALTERDROP、または CHANGE 句の使用。セクション13.1.7「ALTER TABLE 構文」を参照してください。

    • インデックス名の使用、カラムのプリフィクス上のインデックス、および CREATE TABLE ステートメントでの INDEX または KEY の使用。セクション13.1.17「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 句。

    • INSERTREPLACEDELETE、および UPDATE ステートメントの LOW_PRIORITY 句。

    • SELECT ステートメントにおける INTO OUTFILE または INTO DUMPFILE の使用。セクション13.2.9「SELECT 構文」を参照してください。

    • SELECT ステートメントにおける STRAIGHT_JOINSQL_SMALL_RESULT などのオプション。

    • GROUP BY 句で、選択したすべてのカラムの名前を列挙する必要はありません。これにより、ごく一部ではありますが、きわめて一般的なクエリーのパフォーマンスが向上します。セクション12.19「GROUP BY 句で使用される関数と修飾子」を参照してください。

    • ORDER BY を用いるだけでなく GROUP BY を用いても、ASC および DESC を指定できます。

    • := 割り当て演算子で、ステートメント内の変数を設定する機能。セクション9.4「ユーザー定義変数」を参照してください。

  • データ型

    • MEDIUMINTSET、および ENUM データ型と、さまざまな BLOB および TEXT データ型。

    • AUTO_INCREMENTBINARYNULLUNSIGNED、および 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) の使用。

    • 文字列比較はデフォルトで、大文字と小文字が区別され、ソート順序は現在の文字セットの照合順序によって決定されます。デフォルトの文字セットは latin1 (cp1252 西ヨーロッパ) です。これ以外を希望する場合は、BINARY 属性で自身のカラムを宣言するか、BINARY キャストを使用する必要があります。これにより、辞書順ではなくベースとなる文字コード値を使用して比較が行われます。

    • % 演算子は MOD() のシノニムです。つまり、N % MMOD(N,M) と同等です。% は、C プログラマと、PostgreSQL との互換性のためにサポートされています。

    • SELECT ステートメントの出力カラムリスト (FROM の左側) の式で、=<><=<>=><<>><=>ANDOR、または LIKE 演算子を使用できます。例:

      mysql> SELECT col1=1 AND col2=2 FROM my_table;
    • LAST_INSERT_ID() 関数は、最新の AUTO_INCREMENT 値を返します。セクション12.14「情報関数」を参照してください。

    • LIKE は、数値に対して使用できます。

    • REGEXP および NOT REGEXP 拡張正規表現演算子。

    • 1 つまたは複数の引数を使用する CONCAT() または CHAR()。(MySQL Server では、これらの関数は引数をいくつでも使用することができます。)

    • BIT_COUNT()CASEELT()FROM_DAYS()FORMAT()IF()PASSWORD()ENCRYPT()MD5()ENCODE()DECODE()PERIOD_ADD()PERIOD_DIFF()TO_DAYS()、および WEEKDAY() 関数。

    • 部分文字列を削除する TRIM() の使用。標準 SQL では、1 つの文字しか削除できません。

    • GROUP BY 関数 STD()BIT_OR()BIT_AND()BIT_XOR()、および GROUP_CONCAT()セクション12.19「GROUP BY 句で使用される関数と修飾子」を参照してください。


User Comments
User comments in this section are, as the name implies, provided by MySQL users. The MySQL documentation team is not responsible for, nor do they endorse, any of the information provided here.
Sign Up Login You must be logged in to post a comment.