MySQL 8.4 Release Notes
1.7.2.4 '--' 作为注释的开头
标准SQL使用C语法/* 这是注释 */
,MySQL Server也支持这个语法。 MySQL还支持扩展该语法,以嵌入MySQL特定的SQL到注释中;见第11.7节,“注释”。
MySQL Server也使用#
作为注释的开始字符。这是非标准的。
标准SQL还使用“--
”作为注释的开始序列。MySQL Server支持--
注释风格的变体;--
开始注释序列被接受,但必须以空白字符结尾,如空格或换行。空格旨在防止使用生成的SQL查询构造,例如更新余额语句:
UPDATE account SET balance=balance-charge
WHERE account_id=user_id
考虑当charge
值为负数如-1
时,这可能是对账户进行加款的情况。在这种情况下,生成的语句如下:
UPDATE account SET balance=balance--1
WHERE account_id=5752;
balance--1
是标准SQL,但--
被解释为注释的开始,表达式的一部分被丢弃。结果是一个意外的语句:
UPDATE account SET balance=balance
WHERE account_id=5752;
这个语句产生了完全不同的含义。为了防止这种情况,MySQL要求在--
后跟随空白字符,以使MySQL Server才能识别为注释序列,因此表达式balance--1
总是安全使用。