MySQL 8.3 Release Notes
标准 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
始终是安全的。