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


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

1.8.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
Sign Up Login You must be logged in to post a comment.