一些其他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