標準 SQL では、コメントに C 構文 /* this is a comment */
が使用され、MySQL Server でも同様にこの構文がサポートされています。セクション9.6「コメントの構文」で説明するように、MySQL は、MySQL 固有の SQL をコメントに埋め込めるようにする、この構文の拡張機能もサポートします。
標準 SQL では、「--
」 をコメント開始連続文字として使用します。MySQL Server では、「#
」 をコメント開始文字として使用します。MySQL Server 3.23.3 以上では、「--
」 コメントスタイルのバリアントもサポートします。つまり、「--
」 コメント開始連続文字には空白 (または改行などの制御文字) を続ける必要があります。この空白は、payment
の値を自動的に挿入する次のような構造構文を使用した自動生成の SQL クエリーでの問題を防止するために必要です。
UPDATE account SET credit=credit-payment
payment
の値が負数 (-1
など) の場合、どうなるかを考えてみてください。
UPDATE account SET credit=credit--1
credit--1
は SQL では有効な式ですが、「--
」 はコメントの先頭として解釈され、式の一部は破棄されます。結果として、意図したものとはまったく異なる意味を持つステートメントとなってしまいます。
UPDATE account SET credit=credit
このステートメントでは、値が変更されることは一切ありません。これは、コメントを 「--
」 で開始できるようにすると、深刻な結果を招く可能性があること示します。
実装を使用するには、「--
」 が MySQL Server 3.23.3 以降でのコメント開始連続文字として認識されるように、これに空白を続けることが必要になります。したがって、credit--1
は安全に使用できます。
別の安全な機能は、mysql コマンド行クライアントで 「--
」 で始まる行を無視するというものです。
次の情報は、3.23.3 より前のバージョンの MySQL を実行している場合にのみ関連します。
テキストファイルに「--
」コメントを含む SQL スクリプトがある場合は、スクリプトを実行する前に、次のように replace ユーティリティーを使用して「#
」文字を使用するようにコメントを変換してください。
shell> replace " --" " #" < text-file-with-funny-comments.sql \
| mysql db_name
これは通常の方法でスクリプトを実行するよりも安全です。
shell> mysql db_name < text-file-with-funny-comments.sql
「所定の場所」のスクリプトファイルを編集して、「--
」コメントを「#
」コメントに変更することもできます。
shell> replace " --" " #" -- text-file-with-funny-comments.sql
次のコマンドで元に戻してください。
shell> replace " #" " --" -- text-file-with-funny-comments.sql
セクション4.8.2「replace — 文字列置換ユーティリティー」を参照してください。