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