MySQL Server では、次の 3 つのコメントスタイルをサポートしています。
#
文字から行末まで。--
シーケンスから行末まで。 MySQL では、--
(二重ダッシュ) のコメントスタイルは、2 番目のダッシュに少なくとも 1 つの空白または制御文字 (空白、タブ、改行など) を続ける必要があります。 セクション1.7.2.4「コメントの先頭としての「--」」で述べているように、この構文は標準 SQL のコメントの構文とは少し異なります。C プログラミング言語のように、
/*
シーケンスから次の*/
シーケンスまで。 この構文では、開始と終了のシーケンスは同じ行にある必要はないので、複数の行にわたってコメントを記すことができます。
次の例には、3 つのコメントスタイルがすべて示されています。
mysql> SELECT 1+1; # This comment continues to the end of line
mysql> SELECT 1+1; -- This comment continues to the end of line
mysql> SELECT 1 /* this is an in-line comment */ + 1;
mysql> SELECT 1+
/*
this is a
multiple-line comment
*/
1;
ネストされたコメントはサポートされておらず、非推奨になりました。将来の MySQL リリースで削除される予定です。 (一部の条件下では、ネストされたコメントが可能な場合がありますが、通常は可能ではなく、ユーザーはネストされたコメントを使用しないでください。)
MySQL Server では、C 形式のコメントの特定のバリアントがサポートされています。 これらでは、次の形式のコメントを使用することにより、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 */;
前述のコメントの構文は、mysqld サーバーによる SQL ステートメントの構文解析に適用されます。 mysql クライアントプログラムは、ステートメントをサーバーに送信する前に、その一部の構文解析も実行します。 (これは複数ステートメント入力行で、ステートメント境界を決定するために行われます。) サーバーと mysql クライアントパーサーの違いの詳細は、セクション4.5.1.6「mysql クライアントのヒント」 を参照してください。
/*!12345 ... */
形式のコメントはサーバーに格納されません。 この形式を使用してストアドプログラムにコメントを付ける場合、コメントはプログラム本体に保持されません。
オプティマイザヒントの指定には、C 形式のコメント構文の別のバリアントが使用されます。 ヒントコメントには、/*
コメントの開始シーケンスに続く +
文字が含まれます。 例:
SELECT /*+ BKA(t1) */ FROM ... ;
詳細は、セクション8.9.3「オプティマイザヒント」を参照してください。
複数行の/* ... */
コメント内での\C
などの短い形式の mysql コマンドの使用はサポートされていません。 ショートフォームコマンドは、オブジェクト定義に格納されている/*+ ... */
オプティマイザヒントコメントと同様に、単一行の/*! ... */
バージョンコメント内で機能します。 オプティマイザヒントのコメントがオブジェクト定義に格納され、mysql
でリロードされたときにダンプファイルによってそのようなコマンドが実行されることが懸念される場合は、--binary-mode
オプションを指定して mysql を起動するか、mysql 以外のリロードクライアントを使用します。