一些其他SQL數據庫采用“--”作為注釋開始標志。MySQL服務器采用“#”作為注釋起始字符。對於MySQL服務器,也能使用C風格的注釋:/*該處為注釋*/。
MySQL服務器3.23.3和更高版本支持“--”注釋風格,但要求注釋後面跟1空格(或控制字符,如新行)。之所以要求使用空格,是為了防止與自動生成SQL查詢有關的問題,它采用了類似下面的代碼,其中,自動為“!payment!”插入“payment”的值:
UPDATE account SET credit=credit-!payment!
考慮一下,如果“payment”的值為負數如“-1”時會出現什麼情況:
UPDATE account SET credit=credit--1
在SQL中“credit--1”是合法的表達式,但是,如果“--1”被解釋為注釋開始,部分表達式將被捨棄。其結果是,表達式的意義與預期的意義完全不同。
UPDATE account SET credit=credit該語句不會對值作任何更改!這表明,允許注釋以“--”開始會產生嚴重後果。
采用MySQL服務器3.23.3和更高版本中的這類注釋方法,“credit--1”實際上很安全。
另一個安全特性是,MySQL命令行客戶端將刪除所有以“--”開頭的行。
僅當使用高於3.23.3的MySQL時,下述信息才有意義:
如果有1個文本文件形式的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