1.7.2.4'-'作为注释的开始

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

标准SQL使用“ --作为开始注释序列。MySQL Server # 用作开始注释字符。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 Server中将其识别为开始注释序列。因此, credit--1使用安全。

另一个安全的功能是mysql 命令行客户端忽略以开头的行 --

 

posted @ 2020-09-25 11:50  owling  阅读(174)  评论(0编辑  收藏  举报