标准SQL使用C语法/* this is a comment */
进行注释,而MySQL Server也支持该语法。MySQL还支持对此语法的扩展,如第9.6节“注释语法”中所述,该扩展使特定于MySQL的SQL能够嵌入到注释中。
标准SQL使用“ --
”作为开始注释序列。MySQL Server #
用作开始注释字符。MySQL Server还支持--
注释样式的变体。也就是说,--
开始注释序列后必须跟一个空格(或一个控制字符,例如换行符)。需要该空间来防止使用以下结构的自动生成的SQL查询出现问题,在该结构中我们自动为插入付款值payment
:
UPDATE account SET credit=credit-payment
考虑一下如果payment
值为负,会发生什么情况-1
:
UPDATE account SET credit=credit--1
credit--1
是SQL中的有效表达式,但 --
被解释为注释的开始,部分表达式被丢弃。结果是一条语句,其含义与预期的完全不同:
UPDATE account SET credit=credit
该声明根本不会改变价值。这说明,允许以开头的注释 --
会产生严重的后果。
使用我们的实现时,必须在后面加上一个空格, --
以便在MySQL Server中将其识别为开始注释序列。因此, credit--1
使用安全。
另一个安全的功能是mysql 命令行客户端忽略以开头的行 --
。