12.3.1 运算符优先级

运算符优先级从最高优先级到最低优先级显示在以下列 table 中。一起显示在一行上的运算符具有相同的优先级。

INTERVAL
BINARY, COLLATE
!
- (unary minus), ~ (unary bit inversion)
^
*, /, DIV, %, MOD
-, +
<<, >>
&
|
= (comparison), <=>, >=, >, <=, <, <>, !=, IS, LIKE, REGEXP, IN
BETWEEN, CASE, WHEN, THEN, ELSE
NOT
AND, &&
XOR
OR, ||
= (assignment), :=

=的优先级取决于它是用作比较运算符(=)还是用作赋值运算符(=)。当用作比较运算符时,它的优先级与<=>>=><=<<>!=ISLIKEREGEXPIN()相同。当用作赋值运算符时,它的优先级与:=相同。 第 13.7.4.1 节“变量分配的 SET 语法”第 9.4 节“用户定义的变量”解释了 MySQL 如何确定应使用=的哪种解释。

对于在 table 达式中以相同优先级出现的运算符,评估从左至右进行,但赋值从右至左进行评估。

一些运算符的优先级和含义取决于 SQL 模式:

  • 默认情况下,||是逻辑OR运算符。启用PIPES_AS_CONCAT时,||是字符串连接,优先级在^和一元运算符之间。

  • 默认情况下,!的优先级高于NOT。启用HIGH_NOT_PRECEDENCE时,!NOT具有相同的优先级。

See 第 5.1.10 节“服务器 SQL 模式”.

运算符的优先级确定 table 达式中项的求值 Sequences。要显式覆盖此 Sequences 并分组术语,请使用括号。例如:

mysql> SELECT 1+2*3;
        -> 7
mysql> SELECT (1+2)*3;
        -> 9