1.7.2.4 '--' 作为注释的开始

标准 SQL 使用 C 语法/* this is a comment */进行注释,MySQL Server 也支持这种语法。MySQL 还支持对此语法的扩展,使 MySQL 特定的 SQL 能够嵌入到注释中,如第 9.6 节,“注释”中所述。

标准 SQL 使用--作为开始-注释序列。MySQL 服务器# 用作开始注释字符。MySQL Server 还支持--注释样式的变体。也就是说,--开始注释序列后面必须跟一个空格(或一个控制字符,例如换行符)。需要空间以防止自动生成的 SQL 查询出现问题,这些查询使用如下结构,我们自动插入支付的值payment

UPDATE account SET credit=credit-payment

payment考虑如果具有负值 会发生什么,例如-1

UPDATE account SET credit=credit--1

credit--1是 SQL 中的有效表达式,但 --被解释为注释的开始,表达式的一部分被丢弃。结果是一个与预期含义完全不同的语句:

UPDATE account SET credit=credit

该语句根本不产生任何值的变化。这说明允许评论开始 --可能会产生严重的后果。

使用我们的实现需要一个空格, --以便它被识别为 MySQL 服务器中的开始注释序列。因此, credit--1使用安全。

另一个安全特性是mysql 命令行客户端忽略以 --.