MySQL 8.4 发行说明
标准 SQL 使用 C 语法 /* 这是一个注释 */
表示注释,MySQL 服务器也支持这种语法。MySQL 还支持此语法的扩展,允许将特定于 MySQL 的 SQL 嵌入到注释中;请参见 第 11.7 节,“注释”。
MySQL 服务器还使用 #
作为注释字符的开头。这不是标准的。
标准 SQL 还使用 “--
” 作为注释开始序列。MySQL 服务器支持 --
注释样式的变体;--
开始注释序列本身是被接受的,但后面必须跟一个空格字符,例如空格或换行符。空格的目的是防止生成的 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 服务器中的开始注释序列,这样表达式(例如 balance--1
)始终可以安全使用。