MySQL 5.6 リファレンスマニュアル  /  言語構造  /  コメントの構文

9.6 コメントの構文

MySQL Server では、次の 3 つのコメントスタイルをサポートしています。

  • #文字から行末まで。

  • -- シーケンスから行末まで。MySQL では、-- (二重ダッシュ) のコメントスタイルは、2 番目のダッシュに少なくとも 1 つの空白または制御文字 (空白、タブ、改行など) を続ける必要があります。セクション1.8.2.5「コメントの先頭としての「--」」で述べているように、この構文は標準 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


MySQL Server では C-スタイルコメントのバリアントがいくつかサポートされています。これらでは、次の形式のコメントを使用することにより、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 以降のサーバーでのみ実行されます。


前述のコメントの構文は、mysqld サーバーによる SQL ステートメントの構文解析に適用されます。mysql クライアントプログラムは、ステートメントをサーバーに送信する前に、その一部の構文解析も実行します。(これは複数ステートメント入力行で、ステートメント境界を決定するために行われます。)

この形式のコメント (/*!12345 ... */) はサーバーに格納されません。ストアドルーチンのコメントにこの形式が使用されている場合、このコメントはサーバーで保持されません。

複数行にわたる /* ... */ コメント内で、\C などの短い形式の mysql コマンドを使用することはサポートされていません。

Download this Manual
EPUB - 7.5Mb
HTML Download (TGZ) - 7.1Mb
HTML Download (Zip) - 7.2Mb
User Comments
  Posted by John Bercik on April 29, 2009
Just a comment on the comments; It does not appear that you can add comments to Views in MySQL.
  Posted by Andre K. on May 25, 2009
It took me about half an hour to figure out that the semicolon problem isn't fixed in 4.0.13 (as stated in the manual) and at least exists up to 4.1.13.

This throws an "Error 1064":
/*50000 DROP FUNCTION IF EXISTS `foo`; */

But this works as expected (please note the positioning of the semicolon outside the comment):
/*50000 DROP FUNCTION IF EXISTS `foo` */;

(Tested with 4.1.13-max-log and mysql in batch mode)
  Posted by Balaji Devarajan on December 9, 2009
We have sql queries in 1000 places in our bash scripts and it was becoming challenging for me to figure out in the processlist to know which script is running the query. So wanted to come with some simple logic to show the script name as comments for each query in the processlist,

we have the connection string in our config would be easy to change in one place instead changing at all the places in our script.

our project.config
MYSQL1="mysql -h $host -u$dbUser -p$dbPass -A $db"
function visible() {
read sql
case "$1" in
exit 1

echo "$sql" | sed 's/^/\/* '`basename $0`' *\/ /g' | $MYSQL -c

MYSQL='visible MYSQL1'

the script( will still use what they are using.(something like this)
echo "select DISTINCT ID,count(1) CNT from STATS where HIT_DATE between '2009-11-01' and '2009-12-09' group by ID order by CNT desc limit 100;" | $MYSQL

now you will the script name in the processlist
| 987932 | user      | host:55111 | m6_agg  | Query   |       5 | Sorting for group                | /* */ select DISTINCT ID,count(1) CNT from STATS where HIT_DATE between

Now I can go check the script or kill process if need...when the query gets locked or locking replication...etc.

Sign Up Login You must be logged in to post a comment.