top
Loading...
1.8.5.7.‘--’作為注釋起始標記
1.8.5.7. ‘--’作為注釋起始標記

一些其他SQL數據庫采用“--”作為注釋開始標志。MySQL服務器采用“#”作為注釋起始字符。對于MySQL服務器,也能使用C風格的注釋:/*該處為注釋*/。請參見9.5節,“注釋語法”。

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
作者:mysql.com
來源:http://dev.mysql.com/doc/refman/5.1/zh/introduction.html
北斗有巢氏 有巢氏北斗