Documentation Home
MySQL 8.3 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 40.8Mb
PDF (A4) - 40.9Mb
Man Pages (TGZ) - 294.0Kb
Man Pages (Zip) - 409.0Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb
Excerpts from this Manual

MySQL 8.3 Reference Manual  /  ...  /  Operator Precedence

14.4.1 操作符优先级

操作符优先级从最高到最低显示在以下列表中。同一行上的操作符具有相同的优先级。

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

赋值符号 = 的优先级取决于它是作为比较操作符 (=) 还是作为赋值操作符 (=)。当用作比较操作符时,它具有与 <=>, >=, >, <=, <, <>, !=, IS, LIKE, REGEXP, 和 IN() 相同的优先级。当用作赋值操作符时,它具有与 := 相同的优先级。第 15.7.6.1 节,“SET 语法 for 变量赋值”第 11.4 节,“用户定义变量” 解释了 MySQL 如何确定 = 的解释。

对于在同一优先级级别内的表达式中的操作符,评估从左到右进行,除非赋值操作符,它们从右到左评估。

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

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

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

请参阅 第 7.1.11 节,“服务器 SQL 模式”

操作符的优先级确定了表达式中项的评估顺序。要覆盖该顺序并明确地分组项,请使用括号。例如:

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