为什么不呢?在MySQL 5中有不同的运算符优先级?

时间:2014-01-16 21:13:54

标签: mysql logic mysql-5.7

在MySQL中,NOT!执行相同的操作(Logical Not),但它们处于不同的运算符优先级。 !出现在算术和等式运算符之上,NOT低于ANDOR之类的逻辑运算符。见http://dev.mysql.com/doc/refman/5.7/en/operator-precedence.html

在MySQL 3和4中,他们共享相同的优先级。为什么要做出这种改变?

1 个答案:

答案 0 :(得分:2)

鉴于引入了一个标记HIGH_NOT_PRECEDENCE来恢复旧行为,我认为文档的一部分最能说明这一点:

  

NOT运算符的优先级使得诸如NOT a BETWEEN b AND c之类的表达式被解析为NOT(BETWEEN b AND c)。在某些旧版本的MySQL中,表达式被解析为(不是)BETWEEN b和c。

换句话说,NOT并没有像许多人认为的那样表现,因此优先权发生了变化。在撰写!a时,你不太可能绊倒这个,因为这更直观地表达了你在否定a