MySQL 9.0 发行说明
标准 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
)始终可以安全使用。