Related Documentation Download this Manual
PDF (US Ltr) - 40.8Mb
PDF (A4) - 40.9Mb
Man Pages (TGZ) - 294.0Kb
Man Pages (Zip) - 409.0Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb
Excerpts from this Manual

1.6.2.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 始终是安全的。