在 MySQL 中,NOT
做!
同样的事情(Logical Not),但它们处于不同的运算符优先级。 !
出现在算术和相等运算符之上,NOT
低于那些但高于逻辑运算符,如AND
and OR
。见http://dev.mysql.com/doc/refman/5.7/en/operator-precedence.html
在 MySQL 3 和 4 中,它们共享相同的优先级。为什么会做出这样的改变?
在 MySQL 中,NOT
做!
同样的事情(Logical Not),但它们处于不同的运算符优先级。 !
出现在算术和相等运算符之上,NOT
低于那些但高于逻辑运算符,如AND
and OR
。见http://dev.mysql.com/doc/refman/5.7/en/operator-precedence.html
在 MySQL 3 和 4 中,它们共享相同的优先级。为什么会做出这样的改变?
鉴于HIGH_NOT_PRECEDENCE
引入了一个标志来恢复旧的行为,我认为文档的那部分解释得最好:
NOT 运算符的优先级使得诸如 NOT a BETWEEN b AND c 之类的表达式被解析为 NOT (a BETWEEN b AND c)。在一些旧版本的 MySQL 中,表达式被解析为 (NOT a) BETWEEN b AND c。
换句话说,NOT
它的行为不像很多人认为的那样,因此优先级发生了变化。写作时你不太可能绊倒它,!a
因为它更直观地表达了你的否定a
。