標準SQLでは、コメントにC構文/* this is a
comment
*/
が使用され、MySQLサーバでも同様にこの構文がサポートされています。MySQLでもまた、項8.5. 「コメント構文」で記述されているように、MySQL固有のSQLをコメントに組み込ませる構文に対する拡張子がサポートされています。
標準SQLでは、コメント開始
シーケンスとして‘--
’が使用されます。MySQLサーバでは、コメント開始文字として‘#
’が使用されます。MySQLサーババージョン
3.23.3
以降でも、‘--
’コメントスタイルを使用することができます。ただし、‘--
’コメント開始シーケンスは、後にスペース(または、改行などの制御文字)が続かなければなりません。これは、このコメントスタイルによって、payment
の値を自動的に挿入する次のようなコードを使用した自動生成の
SQL
クエリで多数の問題が発生していたためです。
UPDATE account SET credit=credit-payment
payment
の値が負数(-1
など)の場合、どうなるかを考えてみてください。
UPDATE account SET credit=credit--1
SQLではcredit--1
は有効表現ですが、‘--
’はコメント開始の一部として解釈され、表現の一部が破棄されてしまいます。結果として、意図したものとはまったく異なる意味を持つステートメントとなってしまいます。
UPDATE account SET credit=credit
ステートメントでは、値が変更されることは一切ありません。このことは、コメントが‘--
’で開始する場合に、重大な影響があることを示しています。
MySQLサーバ3.23.3以降でこの方法の実装を使用する場合、コメント開始シーケンスとして認識されるように、‘--
’の後にスペースが続かなければなりません。したがって、credit--1
は安全に使用できます。
もう 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
項7.19. 「replace — 文字列置き換えユーティリティ」 を参照してください。