Documentation Home
MySQL 8.4 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 39.8Mb
PDF (A4) - 39.9Mb
Man Pages (TGZ) - 257.9Kb
Man Pages (Zip) - 364.9Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 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), :=

等号(=)的优先级取决于它是否被用作比较运算符 (=) 还是赋值运算符 (=). 当用作比较运算符时,它的优先级与 <=>>=><=<<>ISLIKEREGEXPIN() 相同。 当用作赋值运算符时,它的优先级与 := 相同。 第15.7.6.1节,“SET 语法用于变量赋值”第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